Datum ('2015-1-1') gibt ein anderes Datum aus (2015-01-01)

8

Ich habe gerade festgestellt, dass wenn ich new Date('2015-1-1') verwende, die Zeit kein Zeitzoneneffekt ist, aber wenn ich new Date('2015-01-01') verwende, hat die Zeit einen Zeitzoneneffekt in Node.js.

Ich gebe 4 Date() aus:

%Vor%

Die Ausgabe ist

%Vor%

Sie können sehen, das letzte Mal ist 08:00:00 , weil ich in +8 Zeitzone bin.

Ich denke, die Ausgabe hängt von der Zahl des Monats oder der Datumsnummer ab. Wenn es 10, 11 oder 12 ist, ist die Ausgabe immer 08:00:00

Ich frage mich, warum und ob es eine bessere Möglichkeit gibt, das zu handhaben, außer manuell das Bit der Monats- und Datumsnummer zu überprüfen?

    
Brick Yang 29.11.2015, 11:14
quelle

2 Antworten

1

Bis einschließlich ECMA-262 ed 3 war das Parsen von Datumszeichenfolgen vollständig implementierungsabhängig. Mit ES5 sollten ISO 8601-Formatzeichenfolgen ohne Zeitzone als UTC geparst werden, jedoch ist das Parsen jeder anderen Art von Datumszeichenfolge immer noch implementierungsabhängig.

Mit ECMAScript 2015 werden solche Zeichenfolgen ohne Zeitzone als lokal analysiert (d. h. mit einem Offset basierend auf Systemeinstellungen).

Es scheint also, dass Ihre Node.js-Implementierung die ersten drei Zeichenfolgen nicht als ISO 8601 erkennt und sie daher nach einer anderen internen Logik analysiert, die sie als UTC behandelt.

Die letzte Zeichenfolge wird als ISO 8601-konform angesehen und daher als lokal analysiert.

Wenn Sie alle diese Zeichenfolgen als lokal analysieren möchten, können Sie eine einfache Funktion verwenden wie:

%Vor%
    
RobG 29.11.2015, 11:57
quelle
0

Wahrscheinlich ein Bug, das Beste, was Sie tun können, ist eine Bibliothek wie Moment zu verwenden, die davon frei scheint:

%Vor%

druckt:

%Vor%     
Enrichman 29.11.2015 11:31
quelle

Tags und Links