Chcę przekonwertować ciąg daty na Date
javascript, użyj tego kodu:
var date = new Date('2013-02-27T17:00:00');
alert(date);
'2013-02-27T17:00:00'
to czas UTC w obiekcie JSON z serwera.
Ale wynik powyższego kodu jest inny w Firefoksie i Chrome:
Firefox zwraca:
Wed Feb 27 2013 17:00:00 GMT+0700 (SE Asia Standard Time)
Chrome zwraca:
Thu Feb 28 2013 00:00:00 GMT+0700 (SE Asia Standard Time)
Jest inny 1 dzień, poprawnym wynikiem, jakiego oczekiwałbym, jest wynik z Chrome.
Kod demonstracyjny: http://jsfiddle.net/xHtqa/2/
Jak mogę rozwiązać ten problem, aby uzyskać ten sam wynik z obu?
javascript
date
timezone
cuongle
źródło
źródło
Date {Wed Feb 27 2013 17:00:00 GMT+0000 (GMT)}
dla mnie w obu (Linux).Odpowiedzi:
Prawidłowy format czasu UTC to
2013-02-27T17:00:00Z
(Z to czas Zulu). Dołącz,Z
jeśli nie jest obecny, aby uzyskać poprawny ciąg daty i godziny UTC.źródło
Tak, niestety algorytmy analizujące datę są zależne od implementacji. Ze specyfikacji
Date.parse
(z której korzystanew Date
):Aby
Date
konstruktor nie (być może) używał lokalnej strefy czasowej, użyj łańcucha datetime z informacją o strefie czasowej, np"2013-02-27T17:00:00Z"
. Jednak trudno jest znaleźć format, który byłby niezawodny analizowany przez każdą przeglądarkę - format ISO nie jest rozpoznawany przez IE <8 (zobacz JavaScript: Które przeglądarki obsługują parsowanie ciągu daty ISO-8601 z Date.parse ). Lepiej, użyj uniksowego znacznika czasu, tj. Milisekund od epoki unixowej , lub użyj wyrażenia regularnego, aby podzielić ciąg na części, a następnie wprowadzić je doDate.UTC
.źródło
Znalazłem jedną rzecz. Wygląda na to, że natywna konsola Firefox Inspector może mieć błąd: Jeśli uruchomię „new Date ()” w natywnym Inspektorze, pokaże datę z niewłaściwą strefą czasową i ustawieniem narodowym GMT, ale uruchomię to samo polecenie w konsoli rozszerzeń Firebug, pokazany używa mojej prawidłowej strefy czasowej (GMT-3: 00).
źródło
Zauważyłem, że FireFox nie zwracał tego samego wyniku co Chrome. Wygląda na to, że format używany w kendo.toString dla daty ma znaczenie.
Ostatni wynik konsoli jest tym, czego potrzebowałem:
źródło
Spróbuj użyć momentu.js. Działa bardzo dobrze i podobnie ze wszystkimi przeglądarkami. zawiera wiele opcji formatowania. użyj momentu („data”). format („”) zamiast nowej daty („data”)
źródło