2014-12-11 10 views
7

C'è uno strano comportamento del metodo data setMinutes di FireFox 34 per impostare i 60 minuti per l'anno 2008 01 gennaio 23 ore 00 minuti 00 sec. Si prevede che aumenterà il giorno ma questo no.FireFox 34 setMinutes BUG?

var initDate = [2008, 0, 1]; 
var d = new Date(initDate[0], initDate[1], initDate[2]); 
document.body.innerHTML += d + "<br/>"; 
d.setHours(23); 
d.setMinutes(60); 
document.body.innerHTML += d + "<br/>"; 

Il risultato FireFox 34 è:

Tue Jan 01 2008 00:00:00 GMT+0300 (Russia TZ 2 Standard Time) 
Tue Jan 01 2008 23:00:00 GMT+0300 (Russia TZ 2 Standard Time) 

al posto di Chrome 39.0.2171.71 m:

Tue Jan 01 2008 00:00:00 GMT+0300 (Russia TZ 2 Standard Time) 
Wed Jan 02 2008 01:00:00 GMT+0400 (Russia TZ 2 Daylight Time) 

Se cambio l'anno al 2006 il risultato è ok:

Sun Jan 01 2006 00:00:00 GMT+0300 (Russia TZ 2 Standard Time) 
Mon Jan 02 2006 00:00:00 GMT+0300 (Russia TZ 2 Standard Time) 

http://jsfiddle.net/7dp8xvf8/1/

È un errore?

UPDATE: IE 8 e 9 ha lo stesso comportamento, ma 10-11 è ok.

+2

C'è il punto ovvio che Chrome ha cambiato fuso orario ma FireFox no; Presumo che tu sia in quella posizione da solo, che ci sia stato un cambiamento significativo in quel momento? Non sono stato in grado di trovare nulla online in quella data. –

+0

Che comportamento vedi se 'setMinutes' meno di' 60'? (ad esempio, cosa significa 'd.setMinutes (58);' produce?) Non penso di poter testare il tuo script senza modificare il fuso orario/posizione del mio browser. – apsillers

+0

@AdrianWragg Sono in quella posizione ma prima dell'ultimo aggiornamento di FireFox il problema non è stato visualizzato. –

risposta

0

Data la specification, credo che questo è davvero destinato comportamento. In particolare, si noti che lo MakeTime function non contiene controlli di overflow (vale a dire, non determina se il numero di minuti è inferiore a 60). La funzione MakeDate si comporta in modo simile; quindi, Firefox sta effettivamente seguendo le specifiche correttamente.

+0

No, la specifica calcola il numero di millisecondi-dal-giorno-0 essenzialmente sommando i singoli componenti. Quindi impostare i minuti su 60 dovrebbe cambiare l'ora. – Nickolay

0

Questo funziona come previsto per me in Firefox 39.0.3, così come l'attuale sviluppo costruire (42a), come ottengo:

"Tue Jan 01 2008 00:00:00 GMT+0300 (MSK)" 
"Wed Jan 02 2008 00:00:00 GMT+0300 (MSK)" 

Questo è anche quello che richiede la specifica ES.

Se questo non funziona ancora per te (il che sarebbe sorprendente), e specialmente se vedi stranezze legate al fuso orario, dovresti menzionare anche le impostazioni TZ del tuo sistema.

Problemi correlati