javascript - 将 JSON 日期时间对象转换为 JavaScript 对象

标签 javascript json datetime

我的 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/

相关文章:

javascript - 在 3D 图中用plotly 勾选vals

javascript - node.js 是否能够从 URL 读取?

json - 如何从 json api 中省略工件

javascript - 使用 JSON 相对于 XML 的差异/优点,反之亦然?

postgresql - 如何使用 PostgreSQL 将开始/结束时间列拆分为离散 block ?

datetime - ColdFusion - 具有 GMT 偏移量的日期时间格式

javascript - 从用户输入字段获取数据

javascript - 放置属性而不赋值的目的是什么?

java - 如何从 Json 格式的文件中反序列化通用对象

php - 服务器或客户端在发送/接收日期时应该处理时区吗?