ram*_*ram 1 javascript datetime json
我的JSON以此形式返回对象
"/Date(1307514780000+0530)"
Run Code Online (Sandbox Code Playgroud)
如何将其转换为我的JavaScript日期时间对象?还有什么+0530意思呢?
通过"我的JSON",我推测你指的是Microsoft ASP.NET传递日期时间对象的方式,而不是像你写的那样,但最后还有一个斜杠:
/Date(1307514780000+0530)/
Run Code Online (Sandbox Code Playgroud)
JSON不支持本机JavaScript Date()类型,因此这实际上是一个简单的JSON字符串,但是微软对它进行了多次攻击并实际发送:
\/Date(1307514780000+0530)\/
Run Code Online (Sandbox Code Playgroud)
即使不需要反斜杠,也允许使用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));
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果字符串不是ASP.NET日期时间字符串,则此函数不返回任何内容.您可以将结果(===)与undefined进行比较,以查看是否返回了任何内容.
在我的浏览器上,这个调用:
getDateFromAspString("/Date(1307514780000+0530)/").toString()
Run Code Online (Sandbox Code Playgroud)
返回此字符串:
"Wed Jun 08 2011 01:33:00 GMT-0500 (Central Daylight Time)"
Run Code Online (Sandbox Code Playgroud)
也可以看看: