2012-01-30 7 views
9

Sto provando a creare un oggetto data da una stringa. ottengo data in formato ISO, tranne millisecondi parte come "2012-01-30T16: 23: 12"Firefox new Date() dalla stringa costruisce l'ora nel fuso orario locale

risultati differiscono quando corro seguente codice in IE, Chrome e Firefox (Link to Fiddle)

currentDate = "2012-01-30T16:23:12"; 
var date = new Date(currentDate); 
alert(date); 

IE e Chrome considerano la stringa come UTC ma Firefox considera nel fuso orario locale.

Esiste un modo generico per aggirare il problema tranne che per controllare l'agente utente ovunque?

+0

possibile duplicato di [fastidioso problema di regolazione del fuso orario javascript] (http://stackoverflow.com/questions/7629286/annoying-javascript-timezone-adjustment-issue) –

risposta

12

Si potrebbe provare aggiungendo il fuso orario spostamento origine +00:00 per UTC:

currentDate = "2012-01-30T16:23:12+00:00"; 

fa questo aiuto? (Spiacente, non posso testarlo senza cambiare il mio fuso orario.)

+0

Grazie. Funziona con "+00: 00". In questo modo tutti e tre i browser restituiscono lo stesso valore d'epoca. http://jsfiddle.net/harsha/9ybtN/2/ – harsha

+0

Siamo spiacenti, sì, ha bisogno del colon –

2

Hm, una possibile soluzione è analizzare la stringa e utilizzare i metodi.

setUTCDate()  
setUTCFullYear() 
setUTCHours() 

Probabilmente, non c'è soluzione migliore

+2

+1, questa non è una soluzione alternativa, ma il * modo corretto *, vedi: http://stackoverflow.com/questions/7629286 –

0

Non è garantito che l'input venga analizzato correttamente se nel formato presente. La routine Date.parse() è richiesta solo per analizzare stringhe in un formato particolare, l'analisi di altri formati dipende dall'implementazione. Se avete il coraggio di affidarsi a implementazioni soddisfare il requisito, aggiungere i dati siano conformi al formato specifico:

new Date(currentDate + '.000Z') 

In alternativa, utilizzare una libreria in grado di analizzare i dati nel formato corrente, ad esempio, jQuery o Globalize.js.

Considerazioni simili si applicano alle date di scrittura. Non è possibile garantire il formato di output se si utilizza Date.toString(), esplicitamente o come in alert(date). Anche all'interno di un singolo computer, i diversi browser utilizzeranno diversi formati localizzati.

Problemi correlati