Виждал съм толкова много различни стандарти за формата на датата в 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
Кой е правилният? Или най-добрият? Има ли някакъв стандарт по този въпрос?
Самият JSON не определя** как трябва да се представят датите, но JavaScript го прави.
Трябва да използвате формата, излъчван от метода Date
's toJSON
:
2012-04-23T18:25:43.511Z
Ето защо:
Човекът може да чете, но е и кратък
Сортира правилно
Включва дробни секунди, което може да помогне за възстановяване на хронологията
Съответства на ISO 8601
ISO 8601 е утвърден в международен план вече повече от десетилетие
Въпреки това, всяка библиотека за дати, написана някога, може да разбере "милисекунди от 1970 г. насам". Така че за по-лесна преносимост ThiefMaster е прав.
JSON не знае нищо за датите. Това, което прави .NET, е нестандартен хак/разширение.
Бих използвал формат, който лесно може да се преобразува в обект Date
в JavaScript, т.е. такъв, който може да се подаде на new Date(...)
. Най-лесният и вероятно най-преносимият формат е времевият печат, съдържащ милисекунди от 1970 г. насам.
Няма правилен формат; В спецификацията на JSON не е посочен формат за обмен на дати, поради което има толкова много различни начини за това.
Най-добрият формат вероятно е датата, представена във формат ISO 8601 (вж. Уикипедия); това е добре познат и широко използван формат и може да се обработва на много различни езици, което го прави много подходящ за оперативна съвместимост. Ако имате контрол върху генерирания json, например предоставяте данни на други системи във формат json, изборът на 8601 като формат за обмен на данни е добър избор.
Ако нямате контрол върху генерирания json, например сте потребител на json от няколко различни съществуващи системи, най-добрият начин да се справите с това е да разполагате с помощна функция за разбор на датата, която да обработва различните очаквани формати.