2010-03-23 27 views

Respuesta

18

literales de fecha were proposed and then retracted, tal vez los veremos en una futura edición de la especificación ECMA-262.

Desde there is no Date literal in JavaScript, tampoco hay literal para JSON (JavaScript Object Notation no sería un nombre tan bueno si no pudiera ser analizado por un motor de JavaScript ;-)). Es cierto que esto es desafortunado. Muchos servicios web producirán una cadena ISO 8601, p. 2010-03-23T23:57Z, pero para analizarlo en JavaScript necesitaría usar una biblioteca personalizada, crear una función personalizada o confiar en la especificación de análisis de fecha de ECMAScript 5th, que establece que las implementaciones deberían analizar cadenas ISO 8601 de forma nativa.

Si se trata de su propio JSON que va a ser analizado en JavaScript, podría utilizar algo tan simple como milisegundos desde el 1 de enero de 1970 00:00 con un identificador y luego pasar una función resucitador a JSON.parse:

var myJSON = '{"MyDate":"@[email protected]"}' 
var myObj = JSON.parse(myJSON, function (key, value) 
{ 
    // Edit: don't forget to check the type == string! 
    if (typeof value == "string" && value.slice(0, 1) == "@" && value.slice(-1) == "@") 
     return new Date(+value.substring(1, -1)); 
    else 
     return value; 
} 

Obviamente, necesitaría usar el objeto JSON nativo que se encuentra en los navegadores modernos o json2.js para usar el reviver al analizar.

0

Para representación de cadena de fecha JSON utiliza la notación de cadena, por ejemplo, "2010-03-24 ...", y para la representación de objetos utiliza la notación de objetos "{...}"

+0

Acerca de la fecha, ¿cómo sabe que una cadena es una fecha y no una cadena si utiliza la misma notación? – OscarRyz

7

No hay un formato especial para los literales de fecha.

En Javascript, puede escribir new Date(2010, 2, 23) (Los meses se basan en cero, desafortunadamente).

+0

año - mes - día ¿verdad? ¿Qué hay de JSON? ¿Cuál sería un valor aceptado para una fecha? – OscarRyz

+0

Sí. Para JSON, no hay un estándar; necesitarás usar una cadena ordinaria. – SLaks

+1

Y luego, ¿cómo usarlo en javascript? ¿Debo hacer algo como: 'var myDate = new Date (jsonObj.date);' ??? – OscarRyz

4

depende del serializador.

que podría ser uno de:

/fecha (1224043200000)/

/fecha (1198908717056)/(MS JSON Fecha)

/fecha (1198908717056-1000)/(+/- zona horaria)

new Date ("2010-03-24") (esta es la generalmente aceptada 'Javascript JSON' por lo que entiendo)

"2010-03-24"

etc

+8

no es mi culpa que no haya un literal real, y que cada serializador sea diferente, pero este es un lugar para respuestas prácticas, no pedantes aburridos. –