He visto muchos estándares diferentes para el formato de fecha JSON:
"\"\\/Date(1335205592410)\\/\"" .NET JavaScriptSerializer
"\"\\/Date(1335205592410-0500)\\/\"" .NET DataContractJsonSerializer
"2012-04-23T18:25:43.511Z" JavaScript built-in JSON object
"2012-04-21T18:25:43-05:00" ISO 8601
¿Cuál es el correcto? ¿O el mejor? ¿Existe algún tipo de norma al respecto?
JSON no especifica cómo deben representarse las fechas, pero JavaScript sí lo hace.
Usted debe utilizar el formato emitido por el método Date
de toJSON
:
2012-04-23T18:25:43.511Z
He aquí por qué:
Es legible para el ser humano, pero también es sucinto
Clasifica correctamente
Incluye los segundos fraccionarios, lo que puede ayudar a restablecer la cronología
Se ajusta a la norma ISO 8601
La norma ISO 8601 está bien establecida internacionalmente desde hace más de una década
Dicho esto, todas las bibliotecas de fechas que se han escrito pueden entender "milisegundos desde 1970". Así que para facilitar la portabilidad, ThiefMaster tiene razón.
JSON no sabe nada de fechas. Lo que hace .NET es un hack/extensión no estándar.
Yo utilizaría un formato que se pueda convertir fácilmente en un objeto Date
en JavaScript, es decir, uno que se pueda pasar a new Date(...)
. El formato más fácil y probablemente más portable es la marca de tiempo que contiene milisegundos desde 1970.
No hay un formato correcto; La especificación JSON no especifica un formato para el intercambio de fechas, por lo que hay muchas maneras diferentes de hacerlo.
El mejor formato es, sin duda, una fecha representada en el formato ISO 8601 (ver Wikipedia); es un formato bien conocido y ampliamente utilizado y puede ser manejado a través de muchos lenguajes diferentes, por lo que es muy adecuado para la interoperabilidad. Si tienes control sobre el json generado, por ejemplo, proporcionas datos a otros sistemas en formato json, elegir el 8601 como formato de intercambio de fechas es una buena elección.
Si no tienes control sobre el json generado, por ejemplo, eres el consumidor de json de varios sistemas diferentes existentes, la mejor manera de manejar esto es tener una función de utilidad de análisis de fecha para manejar los diferentes formatos esperados.