2012-07-15 18 views
22

Estoy tratando de calcular la diferencia entre dos veces usando JavaScript. Es solo matemática básica, pero parece que tengo algunos problemas al usar JSON.stringify() y JSON.parse().Problemas con la fecha() al usar JSON.stringify() y JSON.parse()

Si se pregunta por qué estoy aplicando la función JSON.stringify() a la fecha, es porque utilizo el almacenamiento local para almacenar algunos datos del lado del cliente y usarlos cada vez que el cliente aterrice en mi sitio web (es más rápido). en lugar de hacer más solicitudes al servidor). Esa información generalmente se actualiza de vez en cuando (estoy tomando los datos a través de API de otro sitio web), así que configuré una variable data_update y la estoy almacenando junto con los otros datos.

De esta manera agarro los datos almacenados del almacenamiento local y verifico si la diferencia entre data_update (que es una fecha/hora) y la hora/fecha cuando el cheque está hecho y veo si es más de una semana/día/etc.

Esa es la razón por la que estoy usando las funciones JSON. Mi problema es que cuando estoy analizando los datos del almacenamiento local, la fecha parece ser diferente de un objeto Date().

que estoy tratando de hacer la siguiente operación por decir:

var x = JSON.parse(JSON.stringify(new Date())); 

var y = JSON.parse(this.get_local_storage_data(this.data_cache_key)); // the data object stored on local storage 

var q = y.data_update; // this is the variable where the Date() was stored 

console.log(Math.floor((x-q)/1000)); 

El anterior devolverá null. También cuando quiero ver el resultado Math.floor(x), devuelve null nuevamente.

Entonces, ¿qué puedo hacer en esta situación? ¿Hay una solución para esto?

+0

Usted puede evitar el agro como éste por utilizando una envoltura localStorage como rhaboo en lugar de stringify/parse, que tiene muchas otras imprecisiones además de esta. –

Respuesta

43

Si nos fijamos en la salida del JSON.stringify para una fecha, se verá que:

JSON.stringify(new Date()) 

Resultados en una cadena. JSON no tiene una representación primitiva de objetos Date que JSON.parse volverá a convertir automáticamente en un objeto Date. constructor

del objeto Date puede tomar una cadena de fecha, por lo que puede convertir esos valores de cadena de nuevo en las fechas haciendo:

var x = new Date(JSON.parse(JSON.stringify(new Date()))); 

A continuación, la aritmética va a funcionar.

x = new Date(JSON.parse(JSON.stringify(new Date()))) 
y = new Date(JSON.parse(JSON.stringify(new Date()))) 
y - x 
=> 982 
15
JSON.stringify(new Date()) 

vuelve

"2013-10-06T15: 32: 18.605Z"

Gracias a Dios es: Date.toISOString()

+0

Es bueno saber que 'JSON.stringify()' utiliza 'Date.toISOString()' detrás de las escenas. Esto hizo mi código mucho más claro. –

Cuestiones relacionadas