Warum funktioniert die erste Eingabe richtig, aber die zweite Eingabe gibt mir ein Ergebnis vor 5 Stunden?
%Vor%Wie kann ich die zweite mit mir zusammenarbeiten lassen?
Der Grund, warum Sie dies sehen, wird auf der Seite Date.parse()
von MDN (wo viele Details zu den offiziell unterstützten Date
Parameterformaten beschrieben werden). Speziell:
Unterschiede in der angenommenen Zeitzone
Bei einer Datumszeichenkette vom "7. März 2014" wird von parse () eine lokale Zeitzone angenommen, bei einem ISO-Format wie "2014-03-07" wird jedoch eine Zeitzone von UTC (ES5 und ECMAScript) angenommen 2015). Daher können Date-Objekte, die mit diesen Strings erstellt werden, je nach Version von ECMAScript unterschiedliche Zeitpunkte darstellen, sofern das System nicht mit einer lokalen Zeitzone von UTC konfiguriert ist. Dies bedeutet, dass zwei Datumszeichenfolgen, die äquivalent erscheinen, je nach dem Format der Zeichenfolge, die konvertiert wird, zu zwei unterschiedlichen Werten führen.
Was Sie also sehen, ist eine Kombination von zwei Dingen:
Als Ergebnis sehen Sie die US-Eastern-Time-Zone-Version von Mitternacht am 1. Januar 2000, UTC-Zeit (oder am 31. Dezember 1999, 19:00 Uhr).
Da Ihr erstes Beispiel ein Nicht-Standard-Format verwendet (aus Sicht von JS), wird die erste Annahme nicht berücksichtigt und der Wert wird unter der Annahme der lokalen Zeitzone für den Wert (ein Browser-spezifisch) erstellt Entscheidung darüber, wie mit einem Nicht-Standardformat umgegangen wird.)
Die goldene Regel ist niemals Zeichenfolgen mit dem Date-Konstruktor oder Date.parse zu analysieren, da sie weitgehend von der Implementierung abhängig sind. Es gibt viele Macken.
Nach ECMA-262 , sollte die Zeichenfolge "2000-01-01" als gültiges ISO 8601-Datumsformat geparst werden, aber für Zeitzone UTC + 0000 . Alte Browser wie IE 8 können es überhaupt nicht analysieren, und einige können es als lokal behandeln.
Die Zeichenfolge "2000-1-1" entspricht nicht genau dem ISO 8601-Format, daher können Browser auf beliebige Heuristiken zurückgreifen, darunter:
In aktuellen Browsern treten mindestens 1 und 2 auf.
Sie sollten also am besten eine Bibliothek mit einem Parser verwenden und das Format der Zeichenfolge angeben oder eine einfache Funktion schreiben, wenn Sie nur ein Format haben, z. B.
Tags und Links javascript date format