2012-03-06 17 views

risposta

5

Perché non è sufficiente inviare la data in UTC, e poi convertire il fuso orario sul server?

var utcEpochSeconds = dateObj.getTime() + (dateObj.getTimezoneOffset() * 60000); 
+0

Di gran lunga la migliore soluzione poiché la macchina locale non conosce necessariamente l'offset del fuso orario del server. Ancora non riesco a capire perché non esiste un metodo 'dateObj.getUTCTime()'. – RobG

+0

UTC è sempre lo stesso, non importa quale? (Faccio schifo a roba fuso orario) – Tobias

+1

Sì, a meno che il vostro orologio è configurato correttamente o si sta viaggiando a velocità relativistiche: http://en.wikipedia.org/wiki/Coordinated_Universal_Time – tjdett

0

Usa toISOString per ottenere un timestamp UTC.

var date = new Date(); 
date.toISOString(); // EST would be 6 hour diff from GMT 
+0

'toISOString()' è ES5 e non ancora supportato da una buona percentuale di browser Web in uso. Non è difficile da emulare per quelli che non ce l'hanno. – RobG

+0

Non è solo il vecchio IE che non lo supporta? : P In ogni caso, crea uno spessore. – Trevor

1

Affinché questo avvenga, è necessario applicare l'offset per il tempo fuso orario, e quindi rimuovere il vostro offset dal valore (test di questo, sto indovinando dalla memoria):

var now = new Date(), 
    offset = -(now.getTimezoneOffset() * 60 * 1000), // now in milliseconds 
    userUnixStamp = +now + offset; 

Ora offset dal proprio:

var now = new Date(), 
    offset = now.getTimezoneOffset() * 60 * 1000, 
    yourUnixStamp = userUnixStamp - offset; 
+0

potresti inserirlo in un esempio in cui il cliente non importa cosa restituisce lo stesso timestamp per los angeles? perché non riesco a capirci qualcosa in questo momento ... continuo a ottenere risultati diversi. * brainstelt – Tobias

+0

Potresti spiegare la situazione un po 'di più? Da dove viene la data? Come ci si arriva? – Eli

+0

ho bisogno di mantenere qualsiasi client fuso orario al tempo stesso del server - ho già impostato l'ora del server per UTC solo per rendere più facile - ora ho provato a generare il tempo UTC con questo: var d = new Date(); var utc = Math.round (d.getTime() + (d.getTimezoneOffset() * 60000)/1000); ma restituisce sempre un microtime (perché ?! c'è un/1000) timestamp che è di 8 ore in anticipo ... – Tobias

Problemi correlati