繁体   English   中英

将 JSON 日期时间 object 转换为 JavaScript ZA8CFDE6331BD59EB2AC96F8911C4B666

[英]Converting JSON datetime object to JavaScript object

我的 JSON 像这样返回 object

"/Date(1307514780000+0530)" 

如何将此转换为我的 JavaScript 日期时间 object? 另外, +0530是什么意思?

通过“我的 JSON”,我推测您指的是 Microsoft ASP.NET 传递日期时间 object 的方式,而不是您所写的,但在末尾还有一个斜杠:

/Date(1307514780000+0530)/

JSON 不支持本机 JavaScript Date()类型,所以这实际上是一个简单的 JSON 字符串,但微软在这方面做了一些修改:

\/Date(1307514780000+0530)\/

这对于 JSON 字符串是允许的,即使反斜杠不是必需的。 (这两个字符串与您的 JSON 客户端软件相同,但是当 Microsoft JScript 看到这些反斜杠时,它会将其视为特殊结构。而且,是的,这是一个至高无上的 hack。)

符号前的值(也可以是“-”)是自 1970-01-01 00:00:00 UTC 以来的毫秒数。 符号和它后面的值表示演示时区,不需要将值转换为本机 JavaScript Date() object。 该符号表示时区是在 (+) 之前还是之后 (-) UTC,并且数字的格式为“HHMM”,其中“HH”是小时数,“MM”是分钟数。 (在这种情况下,“+0530”是与印度标准时间相同的时区偏移,也就是“IST”。)

使用标准的跨浏览器兼容的 JavaScript 将其转换为本机Date() object:

function getDateFromAspString(aspString) {
  var epochMilliseconds = aspString.replace(
      /^\/Date\(([0-9]+)([+-][0-9]{4})?\)\/$/,
      '$1');
  if (epochMilliseconds != aspString) {
      return new Date(parseInt(epochMilliseconds));
  }
}

请注意,如果字符串不是 ASP.NET 日期时间字符串,则此 function 不会返回任何内容。 您可以将 (===) 结果与未定义进行比较,以查看是否返回了任何内容。

在我的浏览器上,这个调用:

getDateFromAspString("/Date(1307514780000+0530)/").toString()

返回此字符串:

"Wed Jun 08 2011 01:33:00 GMT-0500 (Central Daylight Time)"

也可以看看:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM