javascript / json дата литерал - PullRequest
16 голосов
/ 24 марта 2010

Какой литерал даты для JSON / JavaScript (если такая вещь существует?)

Ответы [ 4 ]

18 голосов
/ 24 марта 2010

Литералы даты были предложены и затем отозваны , возможно, мы увидим их в будущем издании спецификации ECMA-262.

Поскольку нет литерала Date в JavaScript , для JSON также нет литерала (объектная нотация JavaScript не будет слишком хорошим именем, если она не может быть проанализирована движком JavaScript; - )). По общему признанию, это неудачно. Многие веб-сервисы будут выводить строку ISO 8601 , например 2010-03-23T23:57Z, но для его анализа в JavaScript вам потребуется использовать пользовательскую библиотеку, создать пользовательскую функцию или полагаться на спецификацию синтаксического анализа Date в ECMAScript 5, в которой говорится, что реализации должны анализировать строки ISO 8601 изначально.

Если ваш собственный JSON будет анализироваться в JavaScript, вы можете использовать что-то простое, например, миллисекунды с 1 января 1970 г. 00:00 с идентификатором, а затем передать функцию восстановления в JSON.parse:

var myJSON = '{"MyDate":"@1269388885866@"}'
var myObj  = JSON.parse(myJSON, function (key, value)
{
   // Edit: don't forget to check the type == string!
   if (typeof value == "string" && value.slice(0, 1) == "@" && value.slice(-1) == "@")
       return new Date(+value.substring(1, -1));
   else
       return value;
}

Очевидно, что вам понадобится использовать собственный объект JSON, найденный в современных браузерах, или json2.js , чтобы использовать reviver при синтаксическом анализе.

8 голосов
/ 24 марта 2010

Не существует специального формата для литералов даты.

В Javascript вы можете написать new Date(2010, 2, 23) (К сожалению, месяцы начинаются с нуля).

4 голосов
/ 24 марта 2010

зависит от сериализатора.

это может быть один из:

/ Дата (1224043200000) /

/ Дата (1198908717056) / (MS JSON Date)

/ Дата (1198908717056-1000) / (+/- часовой пояс)

новая дата ("2010-03-24") (это общепринятый javascript json, насколько я понимаю)

"2010-03-24"

и т.д.

0 голосов
/ 24 марта 2010

Для строкового представления даты JSON использует строковое обозначение, например "2010-03-24 ...", и для представления объекта используется обозначение объекта "{...}"

...