Eu já vi muitos padrões diferentes para o formato de data 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 é o caminho certo? Ou melhor? Existe algum tipo de padrão nisso?
javascript
json
Kamyar Nazeri
fonte
fonte
strings
,numbers
,true
,false
,null
,objects
Earrays
Respostas:
O próprio JSON não especifica como as datas devem ser representadas, mas o JavaScript sim.
Você deve usar o formato emitida por
Date
'stoJSON
método:2012-04-23T18:25:43.511Z
Aqui está o porquê:
É legível por humanos, mas também sucinto
Classifica corretamente
Inclui segundos fracionários, que podem ajudar a restabelecer a cronologia
Está em conformidade com a ISO 8601
A ISO 8601 está bem estabelecida internacionalmente há mais de uma década
O ISO 8601 é endossado por W3C , RFC3339 e XKCD
Dito isto , toda biblioteca de datas já escrita pode entender "milissegundos desde 1970". Portanto, para facilitar a portabilidade, o ThiefMaster está certo.
fonte
JSON.stringify({'now': new Date()}) "{"now":"2013-10-21T13:28:06.419Z"}"
-
vem antes dos dígitosASCII
, ele ficará bem até o ano 100.000. ; PJSON não sabe nada sobre datas. O que o .NET faz é um hack / extensão não padrão.
Eu usaria um formato que possa ser facilmente convertido em um
Date
objeto em JavaScript, ou seja, um que possa ser passado paranew Date(...)
. O formato mais fácil e provavelmente o mais portátil é o carimbo de data / hora que contém milissegundos desde 1970.fonte
Não há formato certo ; A especificação JSON não especifica um formato para troca de datas e é por isso que existem tantas maneiras diferentes de fazer isso.
O melhor formato é sem dúvida uma data representada no formato ISO 8601 ( consulte a Wikipedia ); é um formato bem conhecido e amplamente usado e pode ser manipulado em vários idiomas diferentes, tornando-o muito adequado para interoperabilidade. Se você tiver controle sobre o json gerado, por exemplo, forneça dados para outros sistemas no formato json, escolhendo 8601 como o formato de troca de datas é uma boa opção.
Se você não tem controle sobre o json gerado, por exemplo, é consumidor de json de vários sistemas existentes diferentes, a melhor maneira de lidar com isso é ter uma função de utilitário de análise de data para lidar com os diferentes formatos esperados.
fonte
Do RFC 7493 (o formato de mensagem I-JSON) :
I-JSON significa Internet JSON ou Interoperable JSON, dependendo de quem você perguntar.
fonte
Date().toISOString()
eDate().toJSON()
, com a limitação queDate
não controla um valor de fuso horário e, portanto, sempre emite os carimbos de data e hora noZ
fuso horário UTC ( ). O valor pode ser analisado usandonew Date("...")
eDate.parseDate
.Apenas para referência, vi este formato usado:
Funciona com JSONP, que é suportado pela
$.getJSON()
função Não tenho certeza se eu recomendaria essa abordagem ... apenas lançá-la como uma possibilidade, porque as pessoas estão fazendo dessa maneira.FWIW: nunca use segundos desde a época em um protocolo de comunicação, nem milissegundos desde a época, porque eles são perigosos graças à implementação aleatória de segundos bissextos (você não tem idéia se o emissor e o receptor implementam corretamente os segundos bissextos UTC).
Um tipo de ódio por animais de estimação, mas muitas pessoas acreditam que o UTC é apenas o novo nome para GMT - errado! Se o seu sistema não implementar segundos bissextos, você estará usando o GMT (geralmente chamado de UTC, apesar de incorreto). Se você implementar totalmente os segundos bissextos, estará realmente usando o UTC. Os segundos bissextos futuros não podem ser conhecidos; eles são publicados pelo IERS conforme necessário e exigem atualizações constantes. Se você estiver executando um sistema que tenta implementar segundos bissextos, mas contém uma tabela de referência desatualizada (mais comum do que você imagina), não possui GMT nem UTC, mas um sistema instável que finge ser UTC.
Esses contadores de datas são compatíveis apenas quando expressos em um formato dividido (y, m, d, etc). NUNCA são compatíveis em um formato de época. Tenha isso em mente.
fonte
Em caso de dúvida, basta acessar o console da web javascript de um navegador moderno pressionando F12 (Ctrl + K no Firefox) e escreva o seguinte:
Saída:
Ta-da !!
fonte
Acredito que o melhor formato para interoperabilidade universal não é a string ISO-8601, mas o formato usado pela EJSON:
{ "myDateField": { "$date" : <ms-since-epoch> } }
Conforme descrito aqui: https://docs.meteor.com/api/ejson.html
Benefícios
Conclusão
Entendo que um formato legível por humanos (string ISO-8601) é útil e mais conveniente para 80% dos casos de uso e, de fato, ninguém deve ser instruído a não armazenar suas datas como strings ISO-8601, se esse for o seu aplicativo. Entenda, mas para um formato de transporte universalmente aceito que garanta que certos valores sejam com certeza datas, como podemos permitir ambiguidade e necessidade de tanta validação?
fonte
O JSON em si não tem formato de data, não importa como alguém armazena datas. No entanto, como essa pergunta está marcada com javascript, suponho que você queira saber como armazenar datas javascript em JSON. Você pode simplesmente passar uma data para o
JSON.stringify
método, que será usadoDate.prototype.toJSON
por padrão, que por sua vez usaDate.prototype.toISOString
( MDN em Date.toJSON ):Também achei útil usar o
reviver
parâmetroJSON.parse
( MDN no JSON.parse ) para converter automaticamente cadeias ISO de volta a datas javascript sempre que leio cadeias JSON.fonte
A maneira preferida é usar
2018-04-23T18:25:43.511Z
...A figura abaixo mostra por que essa é a maneira preferida:
Então, como você vê, o Date tem um método nativo
toJSON
, quereturn
neste formato pode ser facilmente convertido emDate
novamente ...fonte
No Sharepoint 2013, obtendo dados em JSON, não há formato para converter data em formato somente data, porque nessa data deve estar no formato ISO
Isso pode ser útil para você
fonte
"2014-01-01T23: 28: 56.782Z"
A data é representada em um formato padrão e classificável que representa uma hora UTC (indicada pelo Z). O ISO 8601 também suporta fusos horários, substituindo o Z por um valor + ou - para o deslocamento do fuso horário:
"2014-02-01T09: 28: 56.321-10: 00"
Existem outras variações da codificação de fuso horário na especificação ISO 8601, mas o formato –10: 00 é o único formato TZ que os analisadores JSON atuais suportam. Em geral, é melhor usar o formato baseado em UTC (Z), a menos que você tenha uma necessidade específica de descobrir o fuso horário em que a data foi produzida (possível apenas na geração no servidor).
NB: var date = nova data (); console.log (data); // Qua 01/01/2014 13:28:56 GMT- 1000 (Horário padrão do Havaí)
para lhe dizer que é a maneira preferida, mesmo que o JavaScript não tenha um formato padrão para ele
fonte
Se você estiver usando o Kotlin, isso resolverá o seu problema. (Formato MS Json)
fonte
é trabalho para mim com o servidor de análise
fonte
Existe apenas uma resposta correta para isso e a maioria dos sistemas entende errado. Número de milissegundos desde a época, também conhecido como número inteiro de 64 bits. O fuso horário é uma preocupação da interface do usuário e não tem negócios na camada de aplicativo ou na camada de banco de dados. Por que seu banco de dados se importa com o fuso horário de algo, quando você sabe que ele será armazenado como um número inteiro de 64 bits, faça os cálculos de transformação.
Retire os bits estranhos e apenas trate as datas como números até a interface do usuário. Você pode usar operadores aritméticos simples para fazer consultas e lógica.
fonte
O código a seguir funcionou para mim. Este código imprimirá a data no formato DD-MM-AAAA .
caso contrário, você também pode usar:
fonte
Eu acho que isso realmente depende do caso de uso. Em muitos casos, pode ser mais benéfico usar um modelo de objeto adequado (em vez de renderizar a data em uma string), da seguinte maneira:
É certo que isso é mais detalhado que o RFC 3339, mas:
Date.toJSON()
não)Não acho que a classificação correta (como observado pelo funroll da RFC 3339) seja um recurso realmente necessário ao serializar uma data para JSON. Isso também é válido para datas e horários com o mesmo deslocamento de fuso horário.
fonte
post contains wrong information, is poorly researched, or fails to communicate information
. Por favor, explique por qual desses motivos você recusou esta resposta.