2015-10-14 12 views
5

Dziwna rzecz, różne wyniki w różnych przeglądarkach dla nowej daty().nowa data() pokazuje różnice w wynikach przeglądarki Chrome lub Firefox

W Chrome 45.0.2454.101 m:

new Date(2015,9,1) 
Thu Oct 01 2015 00:00:00 GMT+0200 (W. Europe Daylight Time) 

W Firefox 40.0.3 (domyślnie inspektor/konsola)

new Date(2015,9,1) 
Date 2015-09-30T22:00:00.000Z 

Dodatkowe informacje
Jeśli staram się Firefox z konsolą rozszerzenia FIREBUG działa podobnie jak Chrome. Co się dzieje? Wydaje się, że Firefox nie liczył offsetu, w rzeczywistości jest to 2 godziny za poprawną datą. Zrobiłem test na innej stacji roboczej i wydaje się, że ten "błąd".

+2

Czy może to być związane z http://stackoverflow.com/a/15110385/5147646? –

Odpowiedz

4

To tylko zachowanie konsoli debugowania. Dwie wyświetlone wartości dat są takie same i mają poprawną wartość. Widzisz tylko czas lokalny w przeglądarce Chrome, a Firefox wybiera czas UTC w konsoli debugowania.

Dokładniej, Chrome, IE i większość innych przeglądarek po prostu wywołuje obiekt .toString(), podczas gdy Firefox wywołuje .toISOString().

FF Screenshot

Zauważ, że Firefox ma błąd, który nam pokazano niewłaściwą nazwę strefy czasowej (standardowa zamiast Daylight), ale widać, debugger wartość odpowiada wartości ISO8601 UTC.

4

Jeśli nie chcesz strefy czasowej zostać włączone można użyć Date.UTC

Uwaga: W przypadku, gdy data jest nazywany jako konstruktor z więcej niż jednym argumentacji specifed argumenty przedstawiają czas lokalny . Jeśli UTC ma wartość , należy użyć nowej daty (Date.UTC (...)) z tymi samymi argumentami.

~ MDN

Wyjście z konsoli dev Firefox:

> new Date(2015,9,1) 
    Date 2015-09-30T22:00:00.000Z // reproduces your problem, my local time is GMT+0200 
> new Date(Date.UTC(2015,9,1)) 
    Date 2015-10-01T00:00:00.000Z // UTC time 

Jednak 00:00:00 GMT+0200 i 22:00:00.000Z są tylko różne sposoby, aby reprezentować strefę czasową offset reprezentacji data smyczkowego. Różnica polega na metodzie używanej podczas drukowania na konsolę: większość przeglądarek używa .toString(), podczas gdy Firefox używa .toISOString(). (Poddane edycji, wcześniej stwierdził, że implementacje metody toString są różne, co nie jest prawdą).

Zarówno Chrome (Thu Oct 01 2015 00:00:00 GMT+0200) i Firefox (Date 2015-09-30T22:00:00.000Z) metod, takich jak .getDate() i .getMonth() przywrócić te same wartości (1 i 9 odpowiednio). Obiekty Date są takie same.

+0

To nie jest właściwie implementacja 'Date.toString()'. W porządku. po prostu debugger w FF używa zamiast tego 'Date.toISOString()'. –

+0

@MattJohnson dzięki za wyjaśnienie. – pawel

Powiązane problemy