2014-10-16 4 views
8

Ho riscontrato un problema strano con l'inizializzazione dell'oggetto Date. E si chiede se qualcuno può spiegare perché ..I costruttori di date forniscono risultati imprevisti quando vengono chiamati con argomenti simili

var exp1 = new Date('2014-10-17'); 
var exp2 = new Date(2014,9,17); 
var exp3 = new Date('17 Oct 2014'); 
console.log(exp1); 
console.log(exp2); 
console.log(exp3); 

Risultati:

 
Thu Oct 16 2014 18:00:00 GMT-0600 (MDT) // 16th? 
Fri Oct 17 2014 00:00:00 GMT-0700 (MST) // Why GMT -7 
Fri Oct 17 2014 00:00:00 GMT-0600 (MDT) // The only one that works as expected 

Perché questi tre Date oggetti in modo diverso?

+0

Scrivo effettivamente in 9 per la seconda chiamata? o è un errore di battitura che dovrebbe essere 10? – mdewitt

+0

@badaboom Quale browser stai usando? –

+2

@mdewitt Il valore del mese inizia con 0: "Valore intero che rappresenta il mese, che inizia da 0 per gennaio a 11 per dicembre". https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date –

risposta

2

La prima data viene considerata come GMT poiché non viene fornito alcun offset del fuso orario. Quando disconnesso, mostra l'ora nel fuso orario locale. Aggiungendo un offset (exp4 di seguito), ottengo la data prevista.

var exp1 = new Date('2014-10-17'); 
var exp2 = new Date(2014,9,17); 
var exp3 = new Date('17 Oct 2014'); 
var exp4 = new Date('2014-10-17z-0500'); 

Risultati:

Thu Oct 16 2014 19:00:00 GMT-0500 (Central Daylight Time) 
Fri Oct 17 2014 00:00:00 GMT-0500 (Central Daylight Time) 
Fri Oct 17 2014 00:00:00 GMT-0500 (Central Daylight Time) 
Fri Oct 17 2014 00:00:00 GMT-0500 (Central Daylight Time) 

io non sono sicuro di exp2 per voi, ma il sospetto che abbia qualcosa a che fare con l'ora legale e che si vive in una zona che non osserva l'ora legale (Arizona?).

Modifica: questo sembra essere specifico per il browser. I risultati sopra riportati sono stati generati in Chrome mentre in IE 11, exp4 era una data non valida. Per IE 11 ho dovuto utilizzare questo formato:

var exp4 = new Date('2014-10-17T00:00-05:00'); 
+0

Grazie per la risposta. Fuso orario fuso ... potresti aver ragione. Non ci ho pensato. Ma comunque exp1 e exp3 mi confondono. Perché nel primo caso si punta al GMT ma in secondo luogo funziona bene? Funzionalità piuttosto inaspettate .. – badaboom

+0

@badaboom Sì, la differenza tra exp1 e exp3 è imprevista. Non ho visto nulla nella documentazione per spiegarlo, quindi a questo punto credo che dipenda dall'implementazione nel browser e che stiano gestendo le 2 stringhe in modo diverso durante l'analisi. –

+0

ok, grazie. Ma penso che non sia correlato all'implementazione del browser, potrebbe essere qualcosa in JS .. testato in tutti gli ultimi browser – badaboom