2016-04-07 9 views
0

Ich versuche, ein Datum-Objekt mit einer Zeichenfolge in JavaScript zu erstellen, aber ich bekomme ein Datum, das falsch ist.Wie bekomme ich das richtige Datenobjekt aus String in JavaScript

Zum Beispiel im folgenden Stück Code, den ich die Zeichenfolge auf 17. Mai festlegen, aber das Datum, das ich in JavaScript bekomme, ist der 16. Mai. Wie behebe ich das?

>dateString 
"2016-05-17" 
>var newDate = new Date(dateString) 
>newDate 
Mon May 16 2016 17:00:00 GMT-0700 (Pacific Daylight Time) 
+1

http://stackoverflow.com/a/5619588/3037869, für Datum Betrieb Verwendung moment.js Bibliothek – seti

+0

Es wird davon ausgegangen, dass Ihre Datumszeichenfolge in UTC ist. Beachten Sie, dass die Zeit im resultierenden Datum genau sieben Stunden vor Mitternacht UTC ist, was dem Offset entspricht ('GMT-0700'). –

Antwort

0

Verwenden Sie den Date-Konstruktor nicht, oder Date.parse, Datumszeichenketten zu analysieren. Das Format:

"2016-05-17" 

wird als lokal von ISO 8601 behandelt, aber als UTC von ECMA-262. Einige Browser behandeln es als UTC, andere als lokal und einige werden es überhaupt nicht analysieren. Es scheint, dass Ihr Browser es als UTC (gemäß dem Standard) behandelt und Sie sich in einer Zeitzone westlich von GMT befinden. Sie sehen also ein Datum, das einen Tag früher als erwartet ist.

Beachten Sie, dass eine Datums- und Uhrzeitzeichenfolge ohne Zeitzone (z. B. "2016-05-17T00: 00: 00") von ECMA-262 als lokal behandelt wird.

Also immer Zeichenfolgen manuell analysieren. Eine Bibliothek kann helfen, ist aber oft mehr als erforderlich. Also, wenn Sie "2016.05.17" wollen als lokale analysiert, verwenden Sie:

function parseISOLocal(s) { 
 
    var b = s.split(/\D/); 
 
    return new Date(b[0], b[1]-1, b[2]); 
 
} 
 
        
 
document.write(parseISOLocal('2016-05-17'));   

Verwandte Themen