getTimezoneOffset()
Die Methode in JavaScript, in einem Browser, gibt die Anzahl der Minuten vom 00.00 Zeitzone ausgeglichen.Zum Beispiel gibt die Zeitzone America/New_York in Daylight Savings (DST) die Zahl 300 zurück. 300 Minuten sind 5 Stunden Unterschied von Null. 300 Minuten geteilt durch 60 Minuten sind 5 Stunden. Jede Zeitzone wird mit der Nullzeitzone + 00: 00/Etc/GMT/Greenwich-Zeit verglichen.
MDN Web Docs
Das nächste, was Sie wissen müssen, ist, dass der Versatz das entgegengesetzte Vorzeichen der aktuellen Zeitzone hat.
Informationen über Zeitzonen wird durch die Internet Assigned Numbers Authority (IANA)
iana time zones gehalten
Eine schön formatierte Tabelle der Zeitzonen von geliefert wird joda.org
joda-time Time Zones
+00: 00 oder Etc/GMT ist Greenwich-Zeit
Alle Zeitzonen ar e Offset von +00: 00/"Etc/GMT"/Greenwich-Zeit
Sommerzeit ist immer eine frühere Zeit als die "reguläre" Zeit im Sommer. Sie stellen Ihre Uhren im Herbst zurück. ("Fallen" Slogan zu erinnern, was zu tun ist)
So, Amerika/New_York Zeit in Daylight Savings (Winter) ist eine Stunde vor der regulären Zeit. Also zum Beispiel, was normalerweise 17 Uhr war. Nachmittags in New York City im Sommer, ist jetzt 16.00 Uhr. America/New_York Zeit in Daylight Savings. Der Name "America/New_York" -Zeit ist ein "Long Format" -Zeitzonenname. Die Ostküste der USA fordert der Regel ihre Zeitzone Eastern Standard Time (EST)
Wenn Sie Zeitzone des heute wollen Offset der Zeitzone von einem anderen Zeitpunkt versetzt vergleichen, können Sie das Vorzeichen wissen müssen (+/- "Positiv/Negativ") des Zeitzonen-Offsets ist das Gegenteil der Zeitzone.
Sehen Sie sich die Zeitzonentabelle auf joda.org an und finden Sie die Zeitzone für "America/New_York". Sie wird ein negatives Vorzeichen vor dem Standard Offset haben.
Die Erde dreht sich gegen den Uhrzeigersinn um ihre Achse. Eine Person, die den Sonnenaufgang in Greenwich sieht, sieht den Sonnenaufgang 5 Stunden bevor jemand in New York City den Sonnenaufgang sehen wird. Und jemand an der Westküste der USA wird den Sonnenaufgang sehen, nachdem jemand an der Ostküste der USA den Sonnenaufgang gesehen hat.
Es gibt einen Grund, warum Sie das alles wissen müssen. Damit können Sie logisch feststellen, ob JavaScript-Code den DST-Status korrekt ermittelt oder nicht, ohne dass Sie jede Zeitzone zu unterschiedlichen Zeiten im Jahr testen müssen.
Stellen Sie sich vor, es ist November in New York City, und die Uhren wurden eine Stunde zurückgestellt. Im Sommer in New York City beträgt der Offset 240 Minuten oder 4 Stunden.
Sie können dies testen, indem Sie ein Datum im Juli erstellen und dann den Offset abrufen.
var July_Date = new Date(2017, 6, 1);
var july_Timezone_OffSet = July_Date.getTimezoneOffset();
console.log('july_Timezone_OffSet: ' + july_Timezone_OffSet)
Was wird in der Protokolldatei des Browsers für Entwicklerwerkzeuge gedruckt?
Antwort ist: 240
So, jetzt können Sie ein Datum im Januar erstellen und sehen, was Ihr Browser für eine Zeitzone zurückkehrt für die Wintersaison ausgeglichen.
var Jan_Date = new Date(2017, 0, 1);//Month is zero indexed - Jan is zero
var jan_Timezone_OffSet = Jan_Date.getTimezoneOffset();
console.log('jan_Timezone_OffSet: ' + jan_Timezone_OffSet)
Antwort ist: 300
Offensichtlich 300 ist größer als 240. Also, was bedeutet das? Solltest du Code schreiben, der testet, dass der Winter-Offset größer als der Sommer-Offset ist? Oder der Sommer-Offset weniger als der Winter-Offset? Wenn es einen Unterschied zwischen den Sommer- und Winterzeitzonenversätzen gibt, können Sie davon ausgehen, dass die Sommerzeit für diese Zeitzone verwendet wird. Aber das sagt Ihnen nicht, wenn heute DST für die Zeitzone des Browsers verwendet. Sie müssen also den Zeitzonen-Offset für heute abrufen.
var today = new Date();
var todaysTimeZone = today.getTimezoneOffset();
console.log('todaysTimeZone : ' + todaysTimeZone)
Antwort ist:? - Abhängig von der Jahreszeit
Wenn die Zeitzone der heutigen versetzt und die Sommerzeit-Offset-Zone ist die gleiche, UND die Sommer- und Winterzeitzone Offsets unterschiedlich ist, dann durch logische Deduktion, muss heute nicht in sein wird DST.
Können Sie den Vergleich der Sommer- und Winterzeitzonen-Offsets auslassen (um zu wissen, ob DST für diese Zeitzone verwendet wird) und einfach den heutigen Zeitzonen-Offset mit dem Sommer-TZ-Offset vergleichen und immer die richtige Antwort erhalten?
today's TZ Offset !== Summer TZ Offset
Nun, ist heute im Winter oder Sommer? Wenn Sie, dass dann wussten, dass Sie die folgende Logik anwenden könnten:
if (it_is_winter && (todays_TZ_Offset !== summer_TZ_Offset) {
var are_We_In_DST = true;
}
Aber das Problem ist, dass Sie nicht wissen, ob die heutige Datum im Winter oder Sommer. Jede Zeitzone kann eigene Regeln für den Beginn und das Ende der Sommerzeit haben. Sie müssen die Regeln jeder Zeitzone für jede Zeitzone der Welt im Auge behalten. Also, wenn es einen besseren und leichteren Weg gibt, dann könntest du es auch besser und einfacher machen.
Wir müssen wissen, ob diese Zeitzone DST verwendet, und dann den heutigen Zeitzonen-Offset mit dem Sommer-Zeitzonen-Offset vergleichen. Das gibt dir immer eine zuverlässige Antwort.
Die letzte Logik ist:
if (DST_Is_Used_In_This_Time_Zone && (todays_TZ_Offset !== summer_TZ_Offset) {
var are_We_In_DST = true;
}
Funktion, um zu bestimmen, ob die Zeitzone im Browser DST verwendet:
function is_DST_Used_In_This_TimeZone() {
var Jan_Date, jan_Timezone_OffSet, July_Date, july_Timezone_OffSet
offsetsNotEqual, thisYear, today;
today = new Date();//Create a date object that is now
thisYear = today.getFullYear();//Get the year as a number
Jan_Date = new Date(thisYear, 0, 1);//Month is zero indexed - Jan is zero
jan_Timezone_OffSet = Jan_Date.getTimezoneOffset();
console.log('jan_Timezone_OffSet: ' + jan_Timezone_OffSet)
July_Date = new Date(thisYear, 6, 1);
july_Timezone_OffSet = July_Date.getTimezoneOffset();
console.log('july_Timezone_OffSet: ' + july_Timezone_OffSet)
offsetsNotEqual = july_Timezone_OffSet !== jan_Timezone_OffSet;//True if not equal
console.log('offsetsNotEqual: ' + offsetsNotEqual);
return offsetsNotEqual;//If the offsets are not equal for summer and
//winter then the only possible reason is that DST is used for
//this time zone
}
kann ich überprüfen, ob das international funktioniert. Momentan gibt es keine Zeitzonen, die irgendeine Form von DST verwenden, bei der sowohl der 1. Januar als auch der 1. Juli beide entweder in der DST-Periode oder beide sind. In allen Zeitzonen der TZDB (mit einer trivialen Ausnahme) (http://en.wikipedia.org/wiki/Antarctica/Casey)) ist der größere der beiden Offsets der DST-Offset. Da JavaScript 'getTimezoneOffset' den inversen Wert zurückgibt, gibt' Math.max' tatsächlich den * standard * Offset zurück. Der Code ist korrekt. –
Wenn jedoch eine Zeitzone ihre Definition so ändert, dass sowohl der 1. Januar als auch der 1. Juli entweder beide in DST oder beide * nicht * in DST sind (und DST immer noch gilt), dann würde dieser Code in dieser Zone nicht funktionieren. –
Das funktioniert super. Es ist wirklich nett, eine interne Konstante zu setzen wie: 'TIMEZONE_OFFSET = ((new Date()). Dst())?'-04: 00': '-05: 00'' – nessur