javascript-Date-timezone-Problem
Ich brauche eine js Date-Objekt mit den angegebenen Werten für das Datum und das Jahr. Ich würde erwarten, dass
new Date("2000-01-01")
zu geben, mich Date-Objekt mit 2000 als Wert für getFullYear()
, aber wenn mein computer auf die Zeit eingestellt, nach Chicago Zeitzone, ich bin immer Fri Dec 31 1999 18:00:00 GMT-0600 (CST)
, und für Buenos Aires: Fri Dec 31 1999 22:00:00 GMT-0200 (ARST)
.
Gibt es eine Möglichkeit zum erstellen von Date-Objekt, mit .getFullYear()
Rücksendung das Datum legen wir im Konstruktor, egal welche Zeitzone eingestellt ist, die auf dem Rechner des Nutzers?
Update:
Ich muss das Date-Objekt verwendet werden, in eine andere Bibliothek (die Anrufe seiner .getFullYear()
Methode, also die Verwendung der UTC Getter nicht wirklich helfen.
InformationsquelleAutor eagor | 2015-03-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim Parsen einen string, bis ein
Date
in JavaScript ein Wert, der inYYYY-MM-DD
- format interpretiert, als UTC Wert, sondern als einen lokalen Wert.Der Schlüssel ist, dass die Teile, die durch Bindestriche getrennt sind, und dass es keine Zeitzone Informationen in der Zeichenfolge. Die ECMAScript 5.1-Spec sagt im §15.9.1.15:
Das bedeutet, dass, wenn Sie nicht geben Sie eine offset -, es wird angenommen, Sie bedeutete UTC.
Beachten Sie, dass seit das ist das Gegenteil von dem, was ISO-8601 sagt, dies ist das Verhalten wurde geändert, in ECMAScript 2015 (6.0), welcher sagt, in §20.3.1.16:
Daher, wenn diese Bestimmung des ES6 ist richtig implementiert, string-Werte in diesem format verwendet, die interpretiert werden als UTC interpretiert werden, auf lokale Zeit statt. Gebloggt habe ich über dieses hier.
Der workaround ist einfach. Ersetzen Sie die Bindestriche mit Schrägstrichen:
Anderen workaround, der akzeptabel ist, ist das zuweisen einer Zeit des mittags statt um Mitternacht bis zum Datum. Dieser wird analysiert, wie sich die lokale Zeit und ist weit genug entfernt, um keine Sommerzeit Konflikte.
Alternativ, betrachten Sie eine Bibliothek wie moment.js das ist viel sinnvoller.
Mit Schrägstrichen macht es eine nicht-ISO-konforme Zeichenkette, die die meisten Implementierungen interpretiert wird als lokale Zeit. Halten Sie es in
yyyy/mm/dd
format stattmm/dd/yyyy
oderdd/mm/yyyy
hilft auch zu beseitigen regionale Fragen.was ist, wenn ich auch Zeit haben, wie:
"2015-06-01T11:31:01"
. Jeder Weg, es zu tun, ohne mit moment.js? Dankeersetzen Sie die
T
mit einem Raum und es sollte funktionieren.Dies ist immer noch ein wenig zweideutig für mich. Vielleicht: "Datum-nur die Formen werden behandelt, als UTC. Datum+Uhrzeit (ohne Zeitzone) behandelt werden als einheimische, und Datum+Zeit+Zeitzone behandelt, als wenn Sie sind in der Zeitzone" oder so ähnlich.
InformationsquelleAutor Matt Johnson
Können Sie schreiben, neuen Methode 'Datum.Prototyp", und es verwenden, um Datum, das sein wird, einschließlich der lokalen Zeitzone offset.
InformationsquelleAutor yavor.makc