我的 JSON 返回这个对象
"/Date(1307514780000+0530)"
如何将其转换为我的 JavaScript 日期时间对象?
另外,+0530
是什么意思?
最佳答案
关于“我的 JSON”,我推测您指的是 Microsoft ASP.NET 传递日期时间对象的方式,与您所写的不同,但末尾也有一个斜杠:
/Date(1307514780000+0530)/
JSON 不支持 native JavaScript Date() 类型,所以这实际上是一个简单的 JSON 字符串,但 Microsoft 对其进行了更多修改并实际发送了这个:
\/Date(1307514780000+0530)\/
这对于 JSON 字符串是允许的,即使反斜杠不是必需的。 (这两个字符串与您的 JSON 客户端软件相同,但是当 Microsoft JScript 看到这些反斜杠时,它会将其视为特殊结构。而且,是的,这是一个绝妙的 hack。)
符号前的值(也可以是“-”)是自 1970-01-01 00:00:00 UTC 以来的毫秒数。它后面的符号和值表示表示时区,将值转换为 native JavaScript Date() 对象不是必需的。该符号表示时区是在 (+) 之前还是在 (-) UTC 之后,数字格式为“HHMM”,其中“HH”是小时数,“MM”是分钟数。 (在这种情况下,“+0530”是与印度标准时间相同的时区偏移量,又名“IST”。)
使用标准的跨浏览器兼容的 JavaScript 将其转换为 native 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)"
另请参阅:
关于javascript - 将 JSON 日期时间对象转换为 JavaScript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6521246/