将json结果转换为日期[重复]

Posted

技术标签:

【中文标题】将json结果转换为日期[重复]【英文标题】:Converting json results to a date [duplicate] 【发布时间】:2010-11-17 15:54:47 【问题描述】:

可能重复:How to format a JSON date?

我从 javascript 的 $getJSON 调用中得到以下结果。如何在 JavaScript 中将 start 属性转换为正确的日期?

[ "id":1,"start":"/Date(1238540400000)/", "id":2,"start":"/Date(1238626800000)/" ]

谢谢!

【问题讨论】:

"1238540400000" 这是什么?自 1970 年以来的毫秒数? @Meeh :是的,自 1970/01/01 以来的毫秒数 您可以使用 JSON++ 代替 JSON。 JSON++ 与 JSON 相同,但支持 Date 等 JavaScript 类型。 【参考方案1】:

如果该数字代表毫秒,请使用 Date 的构造函数:

var myDate = new Date(1238540400000);

【讨论】:

其实更像 myDate = new DateTime(1970, 1, 1).AddMilliseconds(jsonDateVal);【参考方案2】:

您需要从字符串中提取数字,并将其传递给日期constructor

var x = [
    "id": 1,
    "start": "\/Date(1238540400000)\/"
, 
    "id": 2,
    "start": "\/Date(1238626800000)\/"
];

var myDate = new Date(x[0].start.match(/\d+/)[0] * 1);

部分是:

x[0].start                                - get the string from the JSON
x[0].start.match(/\d+/)[0]                - extract the numeric part
x[0].start.match(/\d+/)[0] * 1            - convert it to a numeric type
new Date(x[0].start.match(/\d+/)[0] * 1)) - Create a date object

【讨论】:

不要 *1 将字符串转换为数字。使用 parseInt(number, 10)。另外,如果你想要一个像 * 1 这样很酷的技巧,只需尝试 +str 使其成为一个数字。 @Greg 我想要一个简短的日期,而不是“Thu Apr 26 2018 14:39:28 GMT+0700 (SE Asia Standard Time)”【参考方案3】:

如果你使用 jQuery

​​>

如果您在客户端使用 jQuery,您可能会对 this blog post 感兴趣,它提供了如何全局扩展 jQuery 的 $.parseJSON() 函数以自动为您转换日期的代码。

在添加此代码的情况下,您不必更改现有代码。它不会影响对$.parseJSON() 的现有调用,但如果您开始使用$.parseJSON(data, true)data 字符串中的日期将自动转换为 Javascript 日期。

它支持 Asp.net 日期字符串:/Date(2934612301)/ 以及 ISO 字符串 2010-01-01T12_34_56-789Z。第一个最常见于最常用的后端 Web 平台,第二个用于原生浏览器 JSON 支持(以及其他 JSON 客户端库,如 json2.js)。

无论如何。前往博客文章以获取代码。 http://erraticdev.blogspot.com/2010/12/converting-dates-in-json-strings-using.html

【讨论】:

感谢您的博客...我认为您需要添加“Z?”到正则表达式匹配日期,否则我们无法匹配非 UTC 日期。 非常感谢!很棒的帖子!【参考方案4】:

我用这个:

function parseJsonDate(jsonDateString)
    return new Date(parseInt(jsonDateString.replace('/Date(', '')));


2018 年更新:

这是一个老问题。我建议不要继续使用这种旧的非标准序列化格式,而是修改服务器代码以返回更好的日期格式。包含时区信息的 ISO 字符串,或者只有毫秒。如果您只使用毫秒进行传输,则在服务器和客户端上应该是 UTC

2018-07-31T11:56:48Z - ISO 字符串可以使用new Date("2018-07-31T11:56:48Z") 解析并从Date 对象获得 使用dateObject.toISOString() 1533038208000 - 自 1970 年 1 月 1 日午夜以来的毫秒数,UTC - 可以使用 new Date(1533038208000) 解析并从 Date 对象获取 使用dateObject.getTime()

【讨论】:

这不考虑关闭')/' parseInt 函数只解析直到找到合法的 int 字符,然后停止。关闭的')/' 将不会被解析。 酷,但听起来不是很健壮:P 它很健壮,因为它每次都能在所有情况下工作 @J.T.Taylor 是的,确实,我只是想减轻您的肯定:“它每次都有效,在所有情况下”

以上是关于将json结果转换为日期[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Javascript将日期转换为UTC [重复]

将mysql查询结果转换为不同的日期格式[重复]

使用gson将结果集转换为json [重复]

将.NET DateTime 转换为 JSON [重复]

将日期和时间转换为时间戳 [重复]

如何在Android中转换以日期为键的JSON [重复]