我的JSON将对象作为返回
"/Date(1307514780000+0530)"
如何将其转换为我的JavaScript日期时间对象?此外,+0530
是什么意思?
通过"我的JSON",我推测您指的是Microsoft ASP.NET传递日期-时间对象的方式,而不是像您所写的那样,而是在末尾加一个斜杠:
/Date(1307514780000+0530)/
JSON不支持本地JavaScriptDate()类型,所以这实际上是一个简单的JSON字符串,但微软对此进行了更多的攻击,并实际发送了以下内容:
/Date(1307514780000+0530)/
这对于JSON字符串是允许的,即使反斜杠不是必需的。(这两个字符串与您的JSON客户端软件相同,但当Microsoft JScript看到这些反斜杠时,它会将其视为一种特殊的结构。是的,这是一种最高的黑客攻击。)
符号前的值(也可以是"-")是自1970-01-01 00:00:00 UTC以来的毫秒数。符号及其后面的值表示表示表示时区,不需要将该值转换为本地JavaScriptDate()对象。该符号表示时区是在UTC(+)之前还是在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日期时间字符串,则此函数不会返回任何内容。您可以将结果与undefined进行比较(===),以查看是否返回了任何内容。
在我的浏览器上,这个调用:
getDateFromAspString("/Date(1307514780000+0530)/").toString()
返回以下字符串:
"Wed Jun 08 2011 01:33:00 GMT-0500 (Central Daylight Time)"
另请参阅:
- Microsoft MSDN:ASP.NET AJAX:内部JSON日期和时间字符串