2010-09-23 32 views
5

Tengo un servicio web que devuelve, por ejemplo, un objeto DateTime: DepartureDate. utilizo ajax a buscar esto y en mi opinión que convertir la cadena de fecha JSON a un objeto de fecha javascript con esta función:Convertir fechas JSON sin zona horaria

function convertToDate(jsonDate) { 
    return eval("new " + jsonDate.substring(1, jsonDate.length - 1)); 
} 

El problema es que new Date() se toma el tiempo local en el equipo cliente en consideración, por lo los clientes en diferentes países obtienen diferentes fechas. Quiero obtener la fecha exacta que fue devuelta por el servicio web. ¿Hay alguna manera fácil de lograr esto?

+0

lo que el valor de la variable "jsonDate" –

+0

podría ser por ejemplo "/ Fecha (1285321800000) /" – knepe

Respuesta

6

El problema es que new Date() se toma el tiempo local en el equipo cliente en consideración

Nop. Crear una nueva fecha utilizando el constructor de marca de tiempo toma una marca de tiempo UTC.

Por ejemplo en mi máquina en GMT + 1:

new Date(0) // Thu Jan 01 1970 01:00:00 GMT+0100 (CET) 

OK, el valor predeterminado toStringpantallas esta fecha como 01:00:00 lo que se ve mal, pero que en realidad es la hora correcta. 01:00:00 en UTC + 1 es 00:00:00 en UTC, que es el momento descrito por la marca de tiempo 0.

Si desea mostrar las fechas que has creación de una marca de tiempo en UTC, utilice date.toUTCString() o ir a buscar y dar formato a las partes consistuent de la fecha usando getUTCFullYear(), etc. getUTCMonth()

favor, sin embargo, no eval.

new Date(parseInt(jsonDate.slice(6, -1), 10)) 
+0

Gracias por su gran bobince respuesta. No soy bueno en las fechas y esas cosas, así que tal vez no entienda todo aquí, pero hice lo que sugirió, y sigue siendo el mismo resultado. Si cambio mi zona horaria en mi máquina, el tiempo cambia (quiero que permanezcan iguales sin importar en qué zona horaria esté, y deben seguir la zona horaria AST). – knepe

+0

El tiempo * que se muestra * por 'toString()' cambia para reflejar su zona horaria, pero eso no significa que la fecha sea diferente. 'new Date (1285321800000) .getUTCHours()' siempre es '9' independientemente de su zona horaria. Siga las funciones 'getUTC ...' y 'setUTC ...' y la fecha se comportará como espera. – bobince

Cuestiones relacionadas