La stringa della data non è in un formato specificato per funzionare con new Date
. L'unico formato nelle specifiche è a simplified version of ISO-8601, ma è stato aggiunto solo in ES5 e quindi il supporto potrebbe essere touch and go. La tua stringa non è in quel formato, ma è molto vicina.
Se si modifica lo spazio per un T
, sarete in specifiche:
var dateString = "2015-12-31 00:00:00";
var d = new Date(dateString.replace(' ', 'T'));
(sto supponendo che non sta usando una stringa letterale, da qui la chiamata replace
.)
Si noti che c'era un errore nella specifica ES5 che è stato corretto in ES2015 (ES6): Cosa accade quando non c'è un indicatore del fuso orario sulla stringa. In ISO-8601, nessun indicatore indica "ora locale", ma la specifica ES5 ha dichiarato che il valore predefinito è Z
(GMT). Lo hanno risolto nelle specifiche ES2015, ma sfortunatamente alcuni motori JavaScript hanno seguito le specifiche ES5 e altri hanno seguito ISO-8601 (e ora ES2015), quindi per un solido supporto cross-browser, devi includere un indicatore del fuso orario perché altrimenti non sapere se sarà interpretato come GMT o ora locale. È consentito utilizzare Z
per GMT o +/-
seguito da HH:MM
per ottenere un offset. (Le abbreviazioni come CST
non sono consentite, poiché non esiste uno standard per esse.)
Se non lo supportano ancora, anche se non è documentato, è disponibile il supporto universale per YYYY/MM/DD HH:MM:SS
. Quindi:
var dateString = "2015-12-31 00:00:00";
var d = new Date(dateString.replace(/-/g, '/'));
fonte
2012-11-13 15:41:25
Cheers, il T sta facendo il trucco ! –
@PhilippSiegfried: eccellente, felice che abbia aiutato! –
@NULL: non ho mai visto un motore JavaScript che non lo supporta.IE6 e versioni successive, ogni versione di Firefox che abbia mai visto, ogni versione di Chrome, ogni versione di Opera. ** Ma **, si deve sempre testare su quegli ambienti target (se qualcosa è "standard" o no, purtroppo). –