Я видел так много разных стандартов для формата даты 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
Какой из них правильный? Или лучше? Есть ли какой-то стандарт на это?
javascript
json
Камьяр Назери
источник
источник
strings
,numbers
,true
,false
,null
,objects
Иarrays
Ответы:
JSON сам по себе не определяет, как даты должны быть представлены, но JavaScript делает.
Вы должны использовать формат , испускаемый
Date
«StoJSON
методом:2012-04-23T18:25:43.511Z
Вот почему:
Это читается человеком, но также кратко
Сортирует правильно
Он включает доли секунды, которые могут помочь восстановить хронологию
Соответствует ISO 8601
ISO 8601 был признан во всем мире уже более десяти лет.
ISO 8601 одобрен W3C , RFC3339 и XKCD
При этом каждая библиотека дат, когда-либо написанная, может понимать «миллисекунды с 1970 года». Так что для легкой переносимости, ThiefMaster подходит.
источник
JSON.stringify({'now': new Date()}) "{"now":"2013-10-21T13:28:06.419Z"}"
-
идет раньше, чем цифрыASCII
, он будет хорошо сортироваться до 100 000 года. ; PJSON ничего не знает о датах. То, что делает .NET - это нестандартный взлом / расширение.
Я хотел бы использовать формат, который может быть легко преобразован в
Date
объект в JavaScript, то есть тот, который может быть переданnew Date(...)
. Самый простой и, вероятно, самый переносимый формат - это отметка времени, содержащая миллисекунды с 1970 года.источник
Там нет правильного формата ; Спецификация JSON не определяет формат для обмена датами, поэтому существует так много разных способов сделать это.
Наилучшим форматом, возможно, является дата, представленная в формате ISO 8601 ( см. Википедия ); Это хорошо известный и широко используемый формат, который может обрабатываться на разных языках, что делает его очень подходящим для взаимодействия. Например, если у вас есть контроль над сгенерированным json, вы предоставляете данные другим системам в формате json, выбрав 8601 в качестве формата обмена датами.
Если у вас нет контроля над сгенерированным json, например, вы являетесь пользователем json из нескольких различных существующих систем, то лучший способ справиться с этим - использовать служебную функцию анализа даты для обработки различных ожидаемых форматов.
источник
Из RFC 7493 (формат сообщений I-JSON) :
I-JSON означает либо интернет-JSON, либо совместимый JSON, в зависимости от того, кого вы спрашиваете.
источник
Date().toISOString()
иDate().toJSON()
, с ограничением, котороеDate
не отслеживает значение часового пояса и, следовательно, всегда выдает временные метки вZ
часовом поясе UTC ( ). Значение может быть проанализировано с помощьюnew Date("...")
иDate.parseDate
.Просто для справки я видел этот формат используется:
Он работает с JSONP, который поддерживается
$.getJSON()
функцией. Не уверен, что я бы зашел так далеко, чтобы рекомендовать этот подход ... просто выбрасывать его как возможность, потому что люди делают это таким образом.FWIW: Никогда не используйте секунды с эпохи в протоколе связи, ни миллисекунды с эпохи, потому что они чреваты опасностью из-за рандомизированной реализации високосных секунд (вы не представляете, правильно ли отправитель и получатель реализуют високосные секунды UTC).
В некотором роде ненависть к домашним животным, но многие люди считают, что UTC - это просто новое название для GMT - неправильно! Если ваша система не поддерживает високосные секунды, то вы используете GMT (часто называемое UTC, хотя оно и неверно). Если вы полностью реализуете дополнительные секунды, вы действительно используете UTC. Будущие високосные секунды не могут быть известны; они публикуются IERS по мере необходимости и требуют постоянных обновлений. Если вы работаете с системой, которая пытается внедрить дополнительные секунды, но содержит устаревшую справочную таблицу (более распространенную, чем вы думаете), то у вас нет ни GMT, ни UTC, у вас шаткая система, претендующая на UTC.
Эти счетчики даты совместимы только в том случае, если они выражены в разбитом формате (y, m, d и т. Д.). Они НИКОГДА не совместимы в эпохальном формате. Запомни.
источник
В случае сомнений просто перейдите в веб-консоль javascript современного браузера, нажав F12 (Ctrl + K в Firefox), и напишите следующее:
Будет выводить:
Та-да !!
источник
Я считаю, что лучшим форматом для универсального взаимодействия является не строка ISO-8601, а формат, используемый EJSON:
{ "myDateField": { "$date" : <ms-since-epoch> } }
Как описано здесь: https://docs.meteor.com/api/ejson.html
Льготы
Вывод
Я понимаю, что удобочитаемый формат (строка ISO-8601) полезен и более удобен для 80% случаев использования, и, действительно, никто никогда не должен указывать не хранить свои даты в виде строк ISO-8601, если это их приложения понять, но для общепринятого транспортного формата, который должен гарантировать определенные значения, которые наверняка будут датами, как мы можем допустить двусмысленность и необходимость в такой большой проверке?
источник
Сам JSON не имеет формата даты, ему все равно, как кто-то хранит даты. Однако, поскольку этот вопрос помечен javascript, я предполагаю, что вы хотите знать, как хранить даты javascript в JSON. Вы можете просто передать дату
JSON.stringify
методу, и он будет использоватьDate.prototype.toJSON
по умолчанию, который в свою очередь используетDate.prototype.toISOString
( MDN на Date.toJSON ):Я также нашел полезным использовать
reviver
параметрJSON.parse
( MDN в JSON.parse ) для автоматического преобразования строк ISO обратно в даты javascript всякий раз, когда я читаю строки JSON.источник
Предпочтительным способом является использование
2018-04-23T18:25:43.511Z
...На рисунке ниже показано, почему это предпочтительный способ:
Итак, как вы видите, у Date есть собственный метод
toJSON
, которыйreturn
в этом формате и может быть легко преобразован вDate
...источник
В Sharepoint 2013 при получении данных в формате JSON отсутствует формат для преобразования даты в формат «только дата», потому что в этой дате должен быть формат ISO
Это может быть полезно для вас
источник
"2014-01-01T23: 28: 56.782Z"
Дата представлена в стандартном и сортируемом формате, который представляет время UTC (обозначено Z). ISO 8601 также поддерживает часовые пояса, заменив Z на значение + или - для смещения часового пояса:
"2014-02-01T09: 28: 56.321-10: 00"
Существуют и другие варианты кодирования часового пояса в спецификации ISO 8601, но формат –10: 00 является единственным форматом TZ, который поддерживают текущие анализаторы JSON. В общем, лучше использовать формат на основе UTC (Z), если у вас нет особой необходимости выяснять часовой пояс, в котором была создана дата (возможно только при генерации на стороне сервера).
NB: переменная дата = новая дата (); console.log (дата); // Ср Янв 2014 2014 13:28:56 GMT- 1000 (Гавайское стандартное время)
чтобы сказать вам, что это предпочтительный способ, хотя JavaScript не имеет стандартного формата для него
источник
Если вы используете Kotlin, то это решит вашу проблему. (Формат MS Json)
источник
это работа для меня с сервером разбора
источник
Существует только один правильный ответ, и большинство систем ошибаются. Количество миллисекунд с начала эпохи, 64-разрядное целое число. Часовой пояс является проблемой пользовательского интерфейса и не имеет никакого отношения к уровню приложений или уровню базы данных. Почему ваша БД заботится о том, что такое часовой пояс, когда вы знаете, что он будет хранить его как 64-битное целое число, а затем выполните вычисления преобразования.
Удалите посторонние биты и просто обрабатывайте даты как числа до пользовательского интерфейса. Вы можете использовать простые арифметические операторы для выполнения запросов и логики.
источник
Следующий код сработал для меня. Этот код будет печатать дату в формате ДД-ММ-ГГГГ .
иначе вы также можете использовать:
источник
Я думаю, что это действительно зависит от варианта использования. Во многих случаях может быть выгоднее использовать правильную объектную модель (вместо отображения даты в строке), например так:
Следует признать, что это более многословно, чем RFC 3339, но:
Date.toJSON()
нет)Я не думаю, что правильная сортировка (как отмечает funroll для RFC 3339) - это функция, которая действительно необходима при сериализации даты в JSON. Также это верно только для даты и времени, имеющих одинаковое смещение часового пояса.
источник
post contains wrong information, is poorly researched, or fails to communicate information
. Пожалуйста, объясните, по какой из этих причин вы отклонили этот ответ.