2015-10-14 14 views
5

Strana cosa, risultati diversi nel browser differente per una nuova data().new Date() mostra risultati differenti in Chrome o Firefox

In Chrome 45.0.2454.101 m:

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

In Firefox 40.0.3 (default ispettore/console)

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

Ulteriori informazioni
Se provo a Firefox con la console di estensione FIREBUG, funziona bene come Chrome. Cosa sta succedendo? Sembra che Firefox non contenga l'offset, infatti è 2 ore indietro rispetto alla data corretta. Ho fatto il test su un'altra workstation e tutto sembra avere questo "bug".

+2

Potrebbe essere correlato a http://stackoverflow.com/a/15110385/5147646? –

risposta

4

Questo è solo il comportamento della console di debug. I due valori di data che hai mostrato sono uguali e sono il valore corretto. Stai visualizzando l'ora locale in Chrome, mentre Firefox sceglie di mostrare l'ora UTC nella console di debug.

Più precisamente, Chrome, IE e molti altri browser chiamano semplicemente .toString() sull'oggetto, mentre Firefox chiama .toISOString().

FF Screenshot

Nota che Firefox ha un bug che ci mostra il nome sbagliato del fuso orario (standard invece di luce del giorno), ma si può vedere il valore di debugger corrisponde al valore ISO8601 UTC.

4

SE non si vuole l'offset da inserire è possibile utilizzare Date.UTC

Nota fuso orario: Dove Data si chiama come un costruttore con più di un argomento, gli argomenti specifed rappresentano ora locale . Se UTC è desiderato, utilizzare la nuova data (Date.UTC (...)) con gli stessi argomenti.

~ MDN

uscita dalla console 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 

Tuttavia 00:00:00 GMT+0200 e 22:00:00.000Z sono modi diversi di rappresentare solo l'offset in rappresentazione di stringa di Data fuso orario. La differenza è il metodo utilizzato quando si stampa su console: la maggior parte dei browser utilizza .toString() mentre Firefox utilizza .toISOString(). (Modificato: in precedenza affermava che le implementazioni del metodo toString sono diverse e non è vero).

Sia Chrome (Thu Oct 01 2015 00:00:00 GMT+0200) e Firefox (Date 2015-09-30T22:00:00.000Z) metodi come .getDate() e .getMonth() restituire gli stessi valori (rispettivamente 1 e 9). Gli oggetti Date sono gli stessi.

+0

In realtà non è l'implementazione di 'Date.toString()'. Questo va bene. è solo che il debugger in FF usa invece 'Date.toISOString()'. –

+0

@MattJohnson grazie per il chiarimento. – pawel

Problemi correlati