J'ai vu tellement de normes différentes pour le format de date 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
Lequel est le bon? Ou mieux? Existe-t-il une sorte de norme à ce sujet?
javascript
json
Kamyar Nazeri
la source
la source
strings
,numbers
,true
,false
,null
,objects
Etarrays
Réponses:
JSON lui - même ne spécifie pas comment les dates doivent être représentées, mais JavaScript le fait.
Vous devez utiliser le format émis par
Date
des »toJSON
méthode:2012-04-23T18:25:43.511Z
Voici pourquoi:
C'est lisible par l'homme mais aussi succinct
Il trie correctement
Il comprend des secondes fractionnaires, ce qui peut aider à rétablir la chronologie
Il est conforme à ISO 8601
ISO 8601 est bien établie à l'échelle internationale depuis plus d'une décennie
ISO 8601 est approuvée par W3C , RFC3339 et XKCD
Cela étant dit , chaque bibliothèque de dates jamais écrite peut comprendre "millisecondes depuis 1970". Donc, pour une portabilité facile, ThiefMaster a raison.
la source
JSON.stringify({'now': new Date()}) "{"now":"2013-10-21T13:28:06.419Z"}"
-
avant les chiffresASCII
, il triera très bien jusqu'à 100 000 ans. ; PJSON ne sait rien des dates. Ce que fait .NET est un hack / extension non standard.
J'utiliserais un format qui peut être facilement converti en
Date
objet en JavaScript, c'est-à-dire qui peut être transmisnew Date(...)
. Le format le plus simple et probablement le plus portable est l'horodatage contenant des millisecondes depuis 1970.la source
Il n'y a pas de bon format ; La spécification JSON ne spécifie pas de format pour l'échange de dates, c'est pourquoi il y a tellement de façons différentes de le faire.
Le meilleur format est sans doute une date représentée au format ISO 8601 ( voir Wikipedia ); il s'agit d'un format bien connu et largement utilisé qui peut être géré dans de nombreuses langues différentes, ce qui le rend très bien adapté à l'interopérabilité. Si vous contrôlez le json généré, par exemple, vous fournissez des données à d'autres systèmes au format json, choisir 8601 comme format d'échange de date est un bon choix.
Si vous n'avez pas de contrôle sur le json généré, par exemple, vous êtes le consommateur de json de plusieurs systèmes existants différents, la meilleure façon de gérer cela est d'avoir une fonction utilitaire d'analyse de date pour gérer les différents formats attendus.
la source
De RFC 7493 (le format de message I-JSON) :
I-JSON signifie Internet JSON ou Interoperable JSON, selon qui vous demandez.
la source
Date().toISOString()
etDate().toJSON()
, avec la limitation quiDate
ne suit pas une valeur de fuseau horaire, et émet donc toujours les horodatages dans le fuseauZ
horaire UTC ( ). La valeur peut être analysée à l'aide denew Date("...")
etDate.parseDate
.Juste pour référence, j'ai vu ce format utilisé:
Il fonctionne avec JSONP qui est pris en charge par la
$.getJSON()
fonction. Je ne suis pas sûr que j'irais jusqu'à recommander cette approche ... en la jetant simplement comme une possibilité parce que les gens le font de cette façon.FWIW: N'utilisez jamais de secondes depuis l'époque dans un protocole de communication, ni de millisecondes depuis l'époque, car celles-ci sont lourdes de danger grâce à l'implémentation aléatoire des secondes intercalaires (vous ne savez pas si l'expéditeur et le destinataire implémentent correctement les secondes intercalaires UTC).
Une sorte de haine pour les animaux de compagnie, mais beaucoup de gens croient que l'UTC n'est que le nouveau nom de GMT - faux! Si votre système n'implémente pas de secondes intercalaires, vous utilisez GMT (souvent appelé UTC bien qu'il soit incorrect). Si vous implémentez complètement les secondes intercalaires, vous utilisez vraiment UTC. Les secondes intercalaires futures ne peuvent être connues; ils sont publiés par l'IERS selon les besoins et nécessitent des mises à jour constantes. Si vous exécutez un système qui tente d'implémenter des secondes intercalaires mais contient une table de référence obsolète (plus courante que vous ne le pensez), vous n'avez ni GMT, ni UTC, vous avez un système bancal prétendant être UTC.
Ces compteurs de date ne sont compatibles que lorsqu'ils sont exprimés dans un format décomposé (y, m, d, etc.). Ils ne sont JAMAIS compatibles dans un format d'époque. Garde cela à l'esprit.
la source
En cas de doute, accédez simplement à la console Web javascript d'un navigateur moderne en appuyant sur F12 (Ctrl + K dans Firefox) et écrivez ce qui suit:
Sortira:
Ta-da !!
la source
Je crois que le meilleur format pour l'interopérabilité universelle n'est pas la chaîne ISO-8601, mais plutôt le format utilisé par EJSON:
{ "myDateField": { "$date" : <ms-since-epoch> } }
Comme décrit ici: https://docs.meteor.com/api/ejson.html
Avantages
Conclusion
Je comprends qu'un format lisible par l'homme (chaîne ISO-8601) est utile et plus pratique pour 80% des cas d'utilisation, et en effet personne ne devrait jamais être dit de ne pas stocker leurs dates en tant que chaînes ISO-8601 si c'est ce que leurs applications comprendre, mais pour un format de transport universellement accepté qui devrait garantir certaines valeurs à coup sûr des dates, comment pouvons-nous tenir compte de l'ambiguïté et avoir besoin de tant de validation?
la source
JSON lui-même n'a pas de format de date, peu importe comment quelqu'un stocke les dates. Cependant, puisque cette question est balisée avec javascript, je suppose que vous voulez savoir comment stocker les dates javascript dans JSON. Vous pouvez simplement passer une date à la
JSON.stringify
méthode, et elle utiliseraDate.prototype.toJSON
par défaut, qui à son tour utiliseDate.prototype.toISOString
( MDN on Date.toJSON ):J'ai également trouvé utile d'utiliser le
reviver
paramètre deJSON.parse
( MDN sur JSON.parse ) pour convertir automatiquement les chaînes ISO en dates javascript chaque fois que je lis les chaînes JSON.la source
La manière préférée utilise
2018-04-23T18:25:43.511Z
...L'image ci-dessous montre pourquoi c'est la manière préférée:
Donc, comme vous le voyez, Date a une méthode native
toJSON
, quireturn
dans ce format et peut être facilement convertie àDate
nouveau ...la source
Dans Sharepoint 2013, obtenir des données en JSON, il n'y a pas de format pour convertir la date en format date uniquement, car cette date doit être au format ISO
Cela peut vous être utile
la source
"2014-01-01T23: 28: 56.782Z"
La date est représentée dans un format standard et triable qui représente une heure UTC (indiquée par le Z). ISO 8601 prend également en charge les fuseaux horaires en remplaçant la valeur Z par + ou - pour le décalage de fuseau horaire:
"2014-02-01T09: 28: 56.321-10: 00"
Il existe d'autres variantes du codage du fuseau horaire dans la spécification ISO 8601, mais le format –10: 00 est le seul format TZ pris en charge par les analyseurs JSON actuels. En général, il est préférable d'utiliser le format UTC (Z), sauf si vous avez un besoin spécifique de déterminer le fuseau horaire dans lequel la date a été produite (possible uniquement dans la génération côté serveur).
NB: var date = new Date (); console.log (date); // mer.01 janv.2014 13:28:56 GMT- 1000 (heure standard hawaïenne)
pour vous dire que c'est la manière préférée même si JavaScript n'a pas de format standard
la source
Si vous utilisez Kotlin, cela résoudra votre problème. (Format MS Json)
la source
c'est du travail pour moi avec parse Server
la source
Il n'y a qu'une seule bonne réponse à cela et la plupart des systèmes se trompent. Nombre de millisecondes depuis l'époque, alias un entier 64 bits. Le fuseau horaire est une préoccupation d'interface utilisateur et n'a aucune activité dans la couche application ou la couche db. Pourquoi votre base de données se soucie-t-elle du fuseau horaire de quelque chose, quand vous savez qu'il va le stocker en tant qu'entier 64 bits, puis faites les calculs de transformation.
Supprimez les bits superflus et traitez simplement les dates comme des nombres jusqu'à l'interface utilisateur. Vous pouvez utiliser des opérateurs arithmétiques simples pour effectuer des requêtes et de la logique.
la source
Le code suivant a fonctionné pour moi. Ce code imprimera la date au format JJ-MM-AAAA .
sinon, vous pouvez également utiliser:
la source
Je pense que cela dépend vraiment du cas d'utilisation. Dans de nombreux cas, il pourrait être plus avantageux d'utiliser un modèle d'objet approprié (au lieu de rendre la date à une chaîne), comme ceci:
Certes, c'est plus verbeux que RFC 3339 mais:
Date.toJSON()
n'est pas le cas)Je ne pense pas que le tri correct (comme noté par funroll pour RFC 3339) soit une fonctionnalité vraiment nécessaire lors de la sérialisation d'une date en JSON. Cela n'est également vrai que pour les dates-heures ayant le même décalage de fuseau horaire.
la source
post contains wrong information, is poorly researched, or fails to communicate information
. Veuillez expliquer pour laquelle l'une des raisons pour lesquelles vous avez rejeté cette réponse.