Twój ciąg daty nie jest w formacie określonym do pracy z new Date
. Jedyny format w specyfikacji to a simplified version of ISO-8601, ale został dodany tylko w ES5, więc wsparcie może być dotykowe i gotowe. Twój ciąg nie jest w tym formacie, ale jest naprawdę blisko.
przypadku zmiany miejsca do T
, będziesz w ciemno:
var dateString = "2015-12-31 00:00:00";
var d = new Date(dateString.replace(' ', 'T'));
(Zakładam, że nie jesteś rzeczywiście przy ciąg dosłowne, stąd połączenie replace
.)
Należy zauważyć, że wystąpił błąd w specyfikacji ES5, który został poprawiony w ES2015 (ES6): Co się dzieje, gdy w ciągu znaków nie ma wskaźnika strefy czasowej. W ISO-8601 żaden wskaźnik nie oznacza "czasu lokalnego", ale specyfikacja ES5 mówi, że domyślnie jest to Z
(GMT). Naprawiono to w specyfikacji ES2015, ale niestety niektóre silniki JavaScript postępowały zgodnie ze specyfikacją ES5, a inne były zgodne z normą ISO-8601 (i teraz ES2015), więc aby uzyskać solidną obsługę różnych przeglądarek, należy uwzględnić wskaźnik strefy czasowej, ponieważ w przeciwnym razie nie wiedzieć, czy będzie to interpretowane jako czas GMT lub czas lokalny. Możesz użyć Z
dla GMT lub +/-
, a następnie HH:MM
, aby uzyskać przesunięcie. (Skróty takie jak CST
są niedozwolone, ponieważ nie ma w nich standardu.)
Jeśli jeszcze tego nie potwierdzą, nawet jeśli jest to nieudokumentowane, istnieje prawie uniwersalna obsługa dla YYYY/MM/DD HH:MM:SS
. Więc:
var dateString = "2015-12-31 00:00:00";
var d = new Date(dateString.replace(/-/g, '/'));
Cheers, T robi trick ! –
@PhilippSafffried: Wspaniale, cieszę się, że pomogło! –
@NULL: Nigdy nie widziałem silnika JavaScript, który go nie obsługiwał.IE6 i nowsze wersje, każda wersja Firefoksa, jaką kiedykolwiek widziałem, każda wersja Chrome, każda wersja Opery. ** Ale **, zawsze należy testować w środowiskach docelowych (bez względu na to, czy coś jest "standardowe", czy nie, niestety). –