将json结果转换为日期

IT技术 javascript json
2021-02-01 14:02:38

可能重复:
如何格式化 JSON 日期?

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

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

谢谢!

4个回答

您需要从字符串中提取数字,并将其传递给 Date 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 使其成为一个数字。
2021-03-14 14:02:38
@Greg 我想要一个短日期而不是“2018 年 4 月 26 日星期四 14:39:28 GMT+0700(东南亚标准时间)”
2021-03-16 14:02:38

我用这个:

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- 自 UTC 时间 1970 年 1 月 1 日午夜以来的毫秒数 - 可以使用 new Date(1533038208000) 解析并使用从Date对象中获取dateObject.getTime()
这不会解释关闭 ')/'
2021-03-16 14:02:38
它很健壮,因为它每次都能在所有情况下工作
2021-03-18 14:02:38
很酷,但这听起来不是很强大:P
2021-03-19 14:02:38
@JTTaylor 是的,确实,我只是想减轻您的肯定:“它在任何情况下都有效”
2021-03-26 14:02:38
parseInt 函数只会解析直到找到 int 的合法字符,然后才会停止。关闭')/'不会被解析。
2021-03-27 14:02:38

如果你使用 jQuery

如果您在客户端使用 jQuery,您可能会对这篇博文感兴趣,该博文提供了如何全局扩展 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 日期。
2021-04-07 14:02:38
非常感谢!很棒的帖子!
2021-04-13 14:02:38

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

var myDate = new Date(1238540400000);
实际上更像是 myDate = new DateTime(1970, 1, 1).AddMilliseconds(jsonDateVal);
2021-04-04 14:02:38