我的JSON以
的形式返回对象"/Date(1307514780000+0530)"
如何将此转换为我的JavaScript日期时间对象?
另外,+0530
是什么意思?
答案 0 :(得分:6)
通过“我的JSON”,我推测你指的是Microsoft ASP.NET传递日期时间对象的方式,而不是像你写的那样,但最后还有一个斜杠:
/Date(1307514780000+0530)/
JSON不支持本机JavaScript Date()类型,因此这实际上是一个简单的JSON字符串,但是微软对它进行了多次攻击并实际发送了这个:
\/Date(1307514780000+0530)\/
即使不需要反斜杠,也允许使用JSON字符串。 (这两个字符串与您的JSON客户端软件相同,但是当Microsoft JScript看到这些反斜杠时,它会将其视为一种特殊结构。而且,是的,这是一个至高无上的黑客。)
符号前面的值(也可以是“ - ”)是自1970-01-01 00:00:00 UTC以来的毫秒数。标志和它后面的值表示演示时区,这不是将值转换为本机JavaScript Date()对象所必需的。符号表示时区是在(+)之前还是在( - )UTC之后,数字的格式为“HHMM”,其中“HH”是小时数,“MM”是分钟数。 (在这种情况下,“+ 0530”与印度标准时间相同的时区偏移,即“IST”。)
使用标准的跨浏览器兼容的JavaScript将其转换为原生的 Date()对象:
function getDateFromAspString(aspString) {
var epochMilliseconds = aspString.replace(
/^\/Date\(([0-9]+)([+-][0-9]{4})?\)\/$/,
'$1');
if (epochMilliseconds != aspString) {
return new Date(parseInt(epochMilliseconds));
}
}
请注意,如果字符串不是ASP.NET日期时间字符串,则此函数不会返回任何内容。您可以将结果与未定义进行比较(===)以查看是否返回了任何内容。
在我的浏览器上,这个调用:
getDateFromAspString("/Date(1307514780000+0530)/").toString()
返回此字符串:
"Wed Jun 08 2011 01:33:00 GMT-0500 (Central Daylight Time)"
另见: