Ihre Datumszeichenfolge ist nicht in einem Format, das mit new Date
arbeiten soll. Das einzige Format in der Spezifikation ist a simplified version of ISO-8601, aber das wurde nur in ES5 hinzugefügt und so kann Unterstützung Touch sein und gehen. Deine Zeichenfolge ist nicht in diesem Format, aber sie ist sehr nah.
Wenn Sie den Platz zu einem T
ändern, werden Sie in spec sein:
var dateString = "2015-12-31 00:00:00";
var d = new Date(dateString.replace(' ', 'T'));
(ich nehme an, Sie sind nicht wirklich eine Stringliteral verwenden, damit die replace
Anruf.)
Beachten Sie, dass in der ES5-Spezifikation ein Fehler aufgetreten ist, der in ES2015 (ES6) korrigiert wurde: Was passiert, wenn auf der Zeichenfolge kein Zeitzonenindikator angezeigt wird? In ISO-8601 bedeutet kein Indikator "lokale Zeit", aber die ES5-Spezifikation besagt, dass standardmäßig Z
(GMT) angegeben wird. Sie haben es in der ES2015-Spezifikation behoben, aber leider folgten einige JavaScript-Engines der ES5-Spezifikation und andere folgten ISO-8601 (und jetzt ES2015). Daher müssen Sie für eine solide browserübergreifende Unterstützung einen Zeitzonenindikator angeben, da Sie dies sonst nicht tun wissen, ob es als GMT oder Ortszeit interpretiert wird. Sie dürfen Z
für GMT oder +/-
verwenden, gefolgt von HH:MM
, um einen Offset zu erhalten. (Abkürzungen wie CST
sind nicht erlaubt, da es für sie keinen Standard gibt.)
Wenn sie das noch nicht unterstützen, obwohl es nicht dokumentiert ist, gibt es fast universelle Unterstützung für YYYY/MM/DD HH:MM:SS
. Also:
var dateString = "2015-12-31 00:00:00";
var d = new Date(dateString.replace(/-/g, '/'));
Cheers, ist die T den Trick tun ! –
@PhilippSiegfried: Ausgezeichnet, froh, dass geholfen hat! –
@NULL: Ich habe noch nie eine JavaScript-Engine gesehen, die das nicht unterstützt.IE6 und höher, jede Version von Firefox, die ich je gesehen habe, jede Version von Chrome, jede Version von Opera. ** Aber **, man muss immer an seinen Zielumgebungen testen (ob etwas "Standard" ist oder nicht, leider). –