【发布时间】:2011-01-31 00:49:51
【问题描述】:
JSON/JavaScript 的日期文字是什么(如果确实存在的话?)
【问题讨论】:
标签: javascript json date literals
JSON/JavaScript 的日期文字是什么(如果确实存在的话?)
【问题讨论】:
标签: javascript json date literals
对于日期的字符串表示,JSON 使用字符串表示法,例如“2010-03-24 ...”,对于对象表示,它使用对象表示法“{...}”
【讨论】:
日期文字没有特殊格式。
在 Javascript 中,您可以编写 new Date(2010, 2, 23)(不幸的是,月份是从零开始的)。
【讨论】:
var myDate = new Date(jsonObj.date); ???
取决于序列化程序。
它可能是以下之一:
/日期(1224043200000)/
/Date(1198908717056)/ (MS JSON 日期)
/日期(1198908717056-1000)/(+/-时区)
new Date("2010-03-24") (据我了解,这是普遍接受的“javascript json”)
“2010-03-24”
等
【讨论】:
日期文字 were proposed and then retracted,也许我们会在 ECMA-262 规范的未来版本中看到它们。
由于there is no Date literal in JavaScript,JSON 也没有文字(如果 JavaScript 引擎无法解析 JavaScript 对象表示法,它的名称就不是太好了 ;-))。诚然,这是不幸的。许多 Web 服务会输出一个 ISO 8601 字符串,例如2010-03-23T23:57Z,但要在 JavaScript 中解析它,您需要使用自定义库、创建自定义函数或依赖 ECMAScript 5th 的日期解析规范,该规范指出实现应该原生解析 ISO 8601 字符串。
如果要在 JavaScript 中解析的是您自己的 JSON,您可以使用简单的东西,例如自 1970 年 1 月 1 日 00:00 起的毫秒数和标识符,然后将 reviver 函数传递给 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。
【讨论】: