2016-08-02 23 views
-1

Wenn ich Datum mit Datum Konstrukteur erstellen neues Datum ('2015', '12'), es ergibt sich Fr Jan 01 2016 00:00:00 GMT-0500 (Eastern Standard Time). Aber nehmen Sie nicht an, dass das Datum, das ich anbiete, bereits eine Tageslichtkonvertierung ist und ein Datumsobjekt für Dezember 2015 anstelle von Jan 2016Javascript Erstellungsdatum ohne Sommerzeit Umwandlung

+5

'neues Datum ('2015', '12')' macht ein Datum mit dem 13. Monat 2015, alias Jan 2016 - Probleme nicht mit DST ... – dandavis

+0

das ist wahr. Danke, dass du das gezeigt hast. Aber meine Fragen sind allgemein. –

+0

Es ist nicht wirklich klar, was Sie wollen. Was ist die Ausgabe, die Sie erwarten? – JJJ

Antwort

2

erstellen. Wenn Sie ein Datum mit dem Date-Konstruktor erstellen, die Zeitzone des Hostsystems ist fast immer verwendet (nach ECMA-262). Die einzige Ausnahme ist, wenn eine Zahl (interpretiert als ein Zeitwert, d. H. Millisekunden seit der ECMAScript-Epoche) bereitgestellt wird oder eine ISO 8601-Formatzeichenfolge mit einer Zeitzone. Selbst dann die interne Zeitwert des Datums (dh Millisekunden seit Beginn der Epoche) in UTC und die Host-System-Zeitzone für die nicht UTC Methoden wie getHours verwendet Offset berechnet, getMinutes usw.

Außerdem wird der Zeitzonen-Offset der aktuellen Systemeinstellungen für historische Daten verwendet. Wenn der Host auf Sommerzeit eingestellt ist, wird er auf Daten angewendet, die vor der Sommerzeit implementiert wurden. Auch historische Änderungen an Sommerzeitumstellungsdaten und -zeiten (und sogar an Werten) werden nicht angewendet. Es wird davon ausgegangen, dass die aktuellen Einstellungen immer für vergangene und zukünftige Daten gelten.

So alle folgenden wird die Zeitzone gelten das Host-Systems versetzt, wenn ein Datum für die 3. Februar Erstellen von 2016:

new Date('2/3/2016'); // US format is assumed by most browsers. 
         // May also create an invalid Date 
new Date(2016, 1, 3); // months are zero indexed so 1 is February 
new Date('2016-02-03T00:00:00'); // note missing time zone 

Allerdings wird die folgende als UTC behandelt werden (oder ungültig):

Wenn Sie zuverlässig ein Datum für einen bestimmten Zeitpunkt aus einer Zeichenfolge erstellen möchten, müssen Sie eine Zeichenfolge mit der Zeitzonenverschiebung angeben. Dann parsen Sie es selbst, da das Parsing von Datumszeichenfolgen weitgehend implementierungsabhängig ist und über Implementierungen hinweg variiert. Das beste Format zu verwenden ist ISO 8601 erweitert, so etwas wie:

'2016-02-03T00:00:00-0800' 

, die den gleichen Zeitpunkt darstellt, egal, was die Einstellungen des Host-Systems sind. Sie müssen es nur zuverlässig analysieren.

Es gibt viele gute Bibliotheken zum Parsen und Formatieren, oder Sie können Ihre eigenen kleinen Funktionen für bestimmte Syntax- und Ausgabeformate schreiben.