436 Stimmen

Liegt das Javascript-Datumsobjekt immer einen Tag daneben?

In meiner Java Script Anwendung habe ich das Datum in einem Format wie folgt gespeichert:

2011-09-24

Wenn ich nun versuche, mit dem obigen Wert ein neues Date-Objekt zu erstellen (damit ich das Datum in einem anderen Format abrufen kann), wird das Datum immer um einen Tag falsch angezeigt. Siehe unten:

var date = new Date("2011-09-24");
console.log(date);

Protokolle:

Fri Sep 23 2011 20:00:00 GMT-0400 (Eastern Daylight Time)

32voto

lincolnk Punkte 10948

Wenn Sie die Stunde 0 eines Datums in der lokalen Zeitzone abfragen möchten, übergeben Sie die einzelnen Datumsbestandteile an die Funktion Date Konstrukteur.

new Date(2011,08,24); // month value is 0 based, others are 1 based.

23voto

Marcos Dantas Punkte 806

Wenn Sie eine einfache Lösung für dieses Problem benötigen, sehen Sie nach:

new Date('1993-01-20'.split('-')); 

enter image description here

11voto

Akhil Ramani Punkte 231

Sie können dieses Datum in ein UTC-Datum umwandeln, indem Sie

new Date(Date.UTC(Year, Month, Day, Hour, Minute, Second))

Und es wird immer empfohlen, das Datum in UTC (Universal Time Zone) anstelle des Datums mit lokaler Zeit zu verwenden, da die Daten in der Datenbank standardmäßig in UTC gespeichert werden. Es ist also eine gute Praxis, im gesamten Projekt Daten im UTC-Format zu verwenden und zu interpretieren. Zum Beispiel,

Date.getUTCYear(), getUTCMonth(), getUTCDay(), getUTCHours()

Die Verwendung von UTC-Daten löst also alle Probleme im Zusammenhang mit Zeitzonenproblemen.

11voto

Aleks G Punkte 54505

Ihr Problem liegt speziell in der Zeitzone. Hinweis Teil GMT-0400 - das heißt, Sie sind 4 Stunden hinter der GMT-Zeit zurück. Wenn Sie zum angezeigten Datum/Uhrzeit 4 Stunden addieren, erhalten Sie genau Mitternacht am 24.09.2011. Verwenden Sie toUTCString() Methode, um GMT-String zu erhalten:

var doo = new Date("2011-09-24");
console.log(doo.toUTCString());

10voto

Jie Zhang Punkte 115

Dies ist wahrscheinlich keine gute Antwort, aber ich möchte nur meine Erfahrungen mit diesem Problem teilen.

Meine App ist global verwenden utc Datum mit dem Format 'YYYY-MM-DD', während die datepicker Plugin ich nur akzeptieren js Datum, es ist schwer für mich, sowohl utc und js zu berücksichtigen. Wenn ich also ein Datum im Format 'YYYY-MM-DD' an meinen Datepicker übergeben möchte, konvertiere ich es zuerst in das Format 'MM/DD/YYYY' mit moment.js oder was auch immer Sie mögen, und das Datum im Datepicker ist nun korrekt. Für Ihr Beispiel

var d = new Date('2011-09-24'); // d will be 'Fri Sep 23 2011 20:00:00 GMT-0400 (EDT)' for my lacale
var d1 = new Date('09/24/2011'); // d1 will be 'Sat Sep 24 2011 00:00:00 GMT-0400 (EDT)' for my lacale

Offenbar ist d1 das, was ich will. Hoffe, dass dies für einige Leute hilfreich sein würde.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X