I'vi tantos padrões diferentes para o formato de data do 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
Qual delas é a certa? Ou a melhor? Há algum tipo de padrão nisto?
JSON ele próprio não especifica como as datas devem ser representadas, mas o JavaScript sim.
Você deveria utilizar o formato emitido pelo método Date
's toJSON
:
2012-04-23T18:25:43.511Z
Aqui está o porquê:
É legível pelo homem, mas também sucinto
Escolhe correctamente.
Inclui os segundos fracionários, que podem ajudar a restabelecer a cronologia
Está em conformidade com ISO 8601.
A ISO 8601 está bem estabelecida internacionalmente há mais de uma década.
**Dito isto, toda biblioteca de datas já escrita pode entender "milissegundos desde 1970". Portanto, para facilitar a portabilidade, ThiefMaster está certo.
O JSON não sabe nada sobre datas. O que o .NET faz é um hack/extensão não-padrão.
Eu utilizaria um formato que pode ser facilmente convertido para um objeto Date
em JavaScript, ou seja, um que pode ser passado para new Date(....)
. O formato mais fácil e provavelmente mais portátil é o timestamp contendo milissegundos desde 1970.
Não há um formato certo; A especificação JSON não especifica um formato para troca de datas, razão pela qual existem tantas formas diferentes de o fazer.
O melhor formato é indiscutivelmente uma data representada em formato ISO 8601 (ver Wikipedia); é um formato bem conhecido e amplamente utilizado e pode ser tratado em muitas línguas diferentes, tornando-o muito bem adequado para a interoperabilidade. Se você tem controle sobre o json gerado, por exemplo, você fornece dados para outros sistemas no formato json, escolhendo o 8601 como o formato de troca de data é uma boa escolha.
Se você não tem controle sobre o json gerado, por exemplo, você é o consumidor do json de vários sistemas diferentes existentes, a melhor maneira de lidar com isso é ter uma função de utilidade de análise de data para lidar com os diferentes formatos esperados.