ein bisschen auf raina77ow ist durchaus akzeptabel Antwort Ausarbeiten ...
Zuerst verstehen, dass die wichtigsten Normen hier beteiligt sind ISO 8601 und RFC 822 (und seine Verwandten 733, 1123 & 2822), die alle waren (in (Teil) abgeleitet von ANSI X3.51-1975.
Alle diese Standards verwenden die Konvention positiver Werte östlich von UTC/GMT und negative Werte westlich von UTC/GMT.
Der einzige Standard, der ich bin mir bewusst, dass hat, dass umgekehrt ist POSIX (siehe POSIX Abschnitt the timezone tag wiki und this article) und damit erklärt, warum die Abwärtskompatibilität Olson Zeitzonen wie „Etc/GMT + 5“ haben ihre Zeichen invertiert. (Natürlich ist es möglich, es gibt andere Verwendungen und ich bin mir nur nicht bewusst.)
Ob Sie es glauben oder nicht, JavaScript tut es beide Wege. Bei Verwendung als String (in der Syntax von RFC 822 oder ISO 8601) werden Stunden und Minuten mit positiven Offsets East von UTC verwendet. Aber wenn die getTimezoneOffset()
Methode auf dem Date
Objekt aufgerufen wird, gibt es ganze Minuten zurück, die positiv sind West von UTC.
Man kann nur spekulieren, warum diese Inkonsistenz existiert. Die ECMAScript spec ist voller solcher Probleme. Vielleicht liegt es daran, dass, wenn Sie einen Offset in einer ISO 8601 oder RFC 822 Zeichenfolge sehen, der Offset bereits angewendet wurde. Aber wenn Sie getTimezoneOffset()
anrufen, ist es der Offset zu gelten, um es zurück zu UTC zu bringen.
Zum Beispiel ist 2014-01-01T00:00:00-05:00
gleich 2014-01-01T05:00:00Z
. So würde getTimezoneOffset()
300
zurückgeben. Wenn Sie dem ursprünglichen Wert 300 Minuten hinzufügen, kehren Sie zu UTC zurück.
Es ist zwei Seiten der gleichen Münze. Sehen?
In Bezug darauf, ob diese spezifische Kontrolle falsch ist oder nicht, bin ich mir nicht sicher. Ich kenne diese besondere Kontrolle nicht. Ich sehe in ihren Dokumenten das Beispiel von -0400, das gleich -240 ist, was man erwarten könnte, umgekehrt zu sein, aber andererseits ist es ein bisschen seltsam, einen Wert wie -240 einem Benutzer zu präsentieren. Wirklich, Sie sollten keine Offsets für einen Benutzer (IMHO) verfügbar machen. Es ist viel besser, ein Zeitzonenauswahlsteuerelement wie this one oder this one zu verwenden.
Richtig, der Zeitzonen-Offset ist relativ zum lokalen. Wenn Sie beispielsweise in der Zone -01: 00 gelebt haben, ist UTC 60 Minuten vor Ihnen oder +60. – lemieuxster
Die Frage in meinem Kopf ist, warum zur Hölle sie es so entworfen haben. – Andy
@ Andy-weil das JavaScript-Date-Objekt eine Kopie des Java-Datumsobjekts war, Warzen und alle (sogar eine 2-stellige * getYear * -Methode). – RobG