JSON.stringify序列化日期不正确

时间:2017-08-04 18:12:15

标签: javascript json

如果我有以下日期(以毫秒为单位):

Tue Apr 03 1984 00:00:00 GMT + 0100(BST)

当我跑步时:

console.log(JSON.stringify(new Date(449794800000)))

它的输出是:

  

“1984-04-02T23:00:00.000Z”

但输出应为:

  

“1984-03-03T23:00:00.000Z”

2 个答案:

答案 0 :(得分:0)

这称为ISO日期格式,是发送日期的标准方式。它是明确且易于解析的,但不是为最大限度地提高人类可读性而设计的。编写JSON.stringify()来处理特别类似的日期,因为日期不是JSON值。如果您希望它更具人性化,您可以执行JSON.stringify(date.toString())。日期更改的原因是它将时区从您的(GMT + 1)切换到GMT,因此它可以返回一小时并在前一天结束。

如果您想创建一个以GMT格式存储一天开头的日期对象,您可以执行以下操作:

const dateHere = new Date(2017, 7, 4)
//60000 ms per minute
const utcMillis = dateHere.getTime() - dateHere.getTimezoneOffset() * 60000
const utcDate = new Date(utcMillis)
console.log(utcDate.toISOString()) //"2017-08-04T00:00:00.000Z"

答案 1 :(得分:0)

因为javascript中dateTime中的449794800000是“1984-04-02T23:00:00.000Z”

亲自试试,运行

console.log(new Date(449794800000)).

实际上,将它与unix时间进行比较,(使用this并将数字除以1000以将其从毫秒转换为秒),日期是正确的。它应该是“1984-04-02T23:00:00.000Z”而不是“1984-03-03T23:00:00.000Z”