2012-03-06 17 views

Respuesta

5

Por qué no simplemente enviar la fecha en UTC, y luego convertir a su zona horaria en el servidor?

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

Con mucho, la mejor solución ya que la máquina local no conoce necesariamente el desplazamiento de la zona horaria del servidor. Todavía no se puede averiguar por qué no hay un método 'dateObj.getUTCTime()'. – RobG

+0

UTC es siempre el mismo, no importa qué? (Soy muy malo en las cosas zona horaria) – Tobias

+1

Sí, a menos que su reloj está mal configurado, o estás viajando a velocidades relativistas: http://en.wikipedia.org/wiki/Coordinated_Universal_Time – tjdett

0

Usa toISOString para obtener un sello de tiempo UTC.

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

'toISOString()' es ES5 y aún no es compatible con un buen porcentaje de navegadores web en uso. No es difícil de emular para los que no lo tienen. – RobG

+0

¿No es solo el viejo IE que no lo admite? : P De cualquier manera, crea un shim. – Trevor

1

Para que esto suceda, es necesario aplicar el desplazamiento a la hora zona horaria, y luego retire su desplazamiento desde el valor (prueba de esto, estoy adivinando de la memoria):

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

Ahora compensado con el suyo:

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

¿podría incluir eso en un ejemplo donde el cliente no importa qué devuelva la misma marca de tiempo para los ángeles? porque no puedo pensar bien ahora ... sigo obteniendo resultados diferentes. * brainmelt – Tobias

+0

¿Podría explicar la situación un poco más? ¿De dónde viene la fecha? ¿Cómo estás llegando? – Eli

+0

i necesidad de mantener cualquier cliente de zona horaria a la misma hora del servidor - i ya ha configurado la hora del servidor a UTC sólo para hacer que sea más fácil - ahora me trató de generar la hora UTC con esto: var d = new Date(); var utc = Math.round (d.getTime() + (d.getTimezoneOffset() * 60000)/1000); pero siempre devuelve un microtime (¿por qué ?! hay un/1000) sello de tiempo que está 8 horas por delante ... – Tobias

Cuestiones relacionadas