Videl som toľko rôznych štandardov pre formát dátumu 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
Ktorý z nich je ten správny? Alebo najlepší? Existuje na to nejaký štandard?
Samotný JSON neurčuje, ako by sa mali reprezentovať dátumy, ale JavaScript áno.
Mali by ste použiť formát, ktorý vysiela metóda Date
'toJSON`]3:
2012-04-23T18:25:43.511Z
Tu'je dôvod:
Je to ľudsky čitateľné, ale aj stručné
Správne triedi
Zahŕňa zlomkové sekundy, ktoré môžu pomôcť obnoviť chronológiu
Je v súlade s normou ISO 8601
Norma ISO 8601 je medzinárodne uznávaná už viac ako desať rokov
Ak už bolo povedané, každá knižnica s dátumom, ktorá bola kedy napísaná, dokáže porozumieť "milisekundám od roku 1970". Takže pokiaľ ide o jednoduchú prenosnosť, ThiefMaster má pravdu.
JSON nevie nič o dátumoch. To, čo robí .NET, je neštandardný hack/rozšírenie.
Použil by som formát, ktorý sa dá ľahko previesť na objekt Date
v JavaScripte, t. j. taký, ktorý sa dá odovzdať new Date(...)
. Najjednoduchší a pravdepodobne najprenosnejší formát je časová značka obsahujúca milisekundy od roku 1970.
Neexistuje správny formát; Špecifikácia JSON nešpecifikuje formát výmeny dátumov, preto existuje toľko rôznych spôsobov, ako to urobiť.
Najlepším formátom je pravdepodobne dátum reprezentovaný vo formáte ISO 8601 (pozri Wikipédiu); ide o dobre známy a široko používaný formát, ktorý sa dá spracovať v mnohých rôznych jazykoch, takže je veľmi vhodný na interoperabilitu. Ak máte kontrolu nad generovaným json, napríklad poskytujete údaje iným systémom vo formáte json, výber formátu 8601 ako formátu na výmenu dátumov je dobrou voľbou.
Ak nemáte kontrolu nad generovaným json, napríklad ste konzumentom json z niekoľkých rôznych existujúcich systémov, najlepším spôsobom, ako to riešiť, je mať funkciu na analýzu dátumu, ktorá spracuje rôzne očakávané formáty.