将json结果转换为日期

lit*_*ris 79 javascript json

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

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

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

谢谢!

Gre*_*reg 97

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

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

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

部分是:

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
Run Code Online (Sandbox Code Playgroud)

  • 不要*1将字符串转换为数字.使用parseInt(数字,10).此外,如果你想要一个很酷的技巧,如*1,只需尝试+ str使它成为一个数字. (18认同)

Rud*_*udy 84

我用这个:

function parseJsonDate(jsonDateString){
    return new Date(parseInt(jsonDateString.replace('/Date(', '')));
}
Run Code Online (Sandbox Code Playgroud)

更新2018年:

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

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

  • 它非常强大,因为它可以在所有情况下每次都有效 (14认同)
  • parseInt函数只解析为找到int的合法字符,然后停止.关闭'')/'`将不会被解析. (7认同)

Rob*_*nik 10

如果你使用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


And*_*ech 6

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

var myDate = new Date(1238540400000);
Run Code Online (Sandbox Code Playgroud)

  • 实际上更像是myDate = new DateTime(1970,1,1).AddMilliseconds(jsonDateVal); (3认同)