正在将JSON日期时间对象转换为JavaScript对象



我的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日期和时间字符串

相关内容

  • 没有找到相关文章

最新更新