2015-12-02 10 views
51

In Chrome, bekommen wir einige SeltsamkeitWarum ist YYYY-MM-DD! = YYYY/MM/DD

> new Date("2014-01-01") - new Date("2014/01/01") 
< 3600000 

Und das ist, weil

new Date("2014-01-01") 
Wed Jan 01 2014 01:00:00 GMT+0100 (CET) 

während

new Date("2014/01/01") 
Wed Jan 01 2014 00:00:00 GMT+0100 (CET) 

Warum scheint das "-" 1 Stunde zu der Zeit hinzuzufügen?

+0

Mine ist Hinzufügen von 2, und ich bin GMT + 2 – JNF

+0

Sieht aus wie es die GMT zu der Zeit hinzufügt – JNF

+0

Was ist Ihr Endziel? Was versuchst du mit dem oben genannten zu erreichen? – Piskvor

Antwort

26

Ich glaube, dass die Differenz von Date.parse verursacht wird UTC einen String hinzugefügt, aber nicht die andere, nämlich: / ist keine juristischer Separator in Date.parse(), was bedeutet, dass UTC nicht zu der Zeit hinzugefügt wird, sobald es analysiert. Da ' ein zulässiges Trennzeichen ist, wird es analysiert und dann wird UTC zur zurückgegebenen Zeit hinzugefügt.

Date.parse wird von der new Date() Methode verwendet und ihre Implementierung ist browserspezifisch, ich bin überrascht, dass diese Art von Sache nicht öfter kommt.

Die Spezifikation für Date.parse sagt:

Der String kann als Ortszeit, UTC-Zeit oder eine Zeit lang in einer anderen Zeitzone interpretiert werden, je nach dem Inhalt des String. Die Funktion versucht zuerst, das Format des Strings gemäß den Regeln zu interpretieren, die im Date Time String Format (15.9.1.15) aufgerufen wurden. Wenn der String diesem Format nicht entspricht, kann die Funktion auf implementierungsspezifische Heuristiken oder implementierungsspezifische Datumsformate zurückgreifen.

Also würde ich entweder vorschlagen, in einer Zeitzone manuell hinzufügen, bevor Sie analysieren, oder die Zeit jedoch wieder verworfen von new Date(), das auf Fragen rund um Mitternacht usw. Die sicherste Sache wäre führen könnte, um zu sehen, ob Sie bekommen können das Datum in einem spezifischeren Format von beiden Systemen mit Zeitzoneninformationen.

1

Es ist wegen der Globalisierung. Der Bindestrich (-) ist keine englische Notation (GMT). Javascript analysiert die Notation. Versuchen Sie, die Kultur festzulegen und verwenden Sie dann die Notation.

+2

Eigentlich sieht es so aus als wäre das '-' OK, aber nicht das'/' –

12

Zitieren von V8 source code.

Die Kommentare von dieser Funktion

bool DateParser::Parse(Vector<Char> str, 
         FixedArray* out, 
         UnicodeCache* unicode_cache) 

Accept ES5 ISO 8601 Datum-Zeit-Strings oder Legacy-Daten mit Safari kompatibel.

ES5 ISO 8601 Termine:

[('-'|'+')yy]yyyy[-MM[-DD]][THH:mm[:ss[.sss]][Z|(+|-)hh:mm]] 

Eine Zeichenfolge, die beide Formate übereinstimmt (zB 1970-01-01) wird als ES5 Datum-Zeit-Zeichenfolge analysiert - das heißt, es zu UTC ausfällt Zeitzone. Dies ist unvermeidbar, wenn die ES5-Spezifikation eingehalten wird.

Der Strich (-) ist die korrekte Schreibweise für Date.

Verwandte Themen