1

我正在使用Date对象在 javascript 中进行一些日期操作。我花了大约一个小时来理解一个错误:在初始化之后,我使用.toJSON()了函数并且我的日期减一。这是我正在做的代码示例:

var date = new Date();
console.log(date.getDate()); // print "19"
date.setDate(date.getDate()-1); // print "18"
var formated = date.toJSON().substr(0, 10); // print "2013-09-17"

突然,日期从 18 日变为 17 日。所以为了确保我直接在开发者控制台中尝试了这个:

new Date(2013, 09, 19)
Sat Oct 19 2013 00:00:00 GMT+0200 (Paris, Madrid (heure d’été)) // date "19" as it should
new Date(2013, 09, 19).toJSON()
"2013-10-18T22:00:00.000Z" // date "18" as it shouldn't

现在我的问题只是“为什么?”。

这有可能来自我的配置还是其他?

这是一个错误吗?如果是,这是一个已知的错误吗?

4

4 回答 4

5

如果你仔细看:

new Date(2013, 09, 19);
=> Sat Oct 19 2013 00:00:00 GMT+0200 (CEST)

这里有两件事很重要:

  1. 小时 :00:00:00
  2. 时区:+0200

然后,当您调用 时.toJSON,它会将其转换为 GMT + 0。

所以00:00:00 - 2hr= Today -1, hour being 22:00:00

现在看看:

new Date(2013, 09, 19).toJSON()
=> "2013-10-18T22:00:00.000Z"

前一天,但小时设置为22:00:00

这就是原因:从 切换GMT+0200GMT+0.

现在对于解决方案,有人已经问过了:Javascript Date.toJSON 没有得到时区偏移量;)

于 2013-09-20T08:48:33.513 回答
0

这里绝对没有错误,只需检查时区即可。

于 2013-09-20T08:48:29.223 回答
0

JSON 字符串采用 GMT 格式(这就是Z结尾的意思)。您的当地时间比那早两个小时。因此,您所在时区的 19 日午夜是格林威治标准时间 18 日的 22:00。

于 2013-09-20T08:48:33.143 回答
0

这是因为 -2 小时的时间偏移。试着做

YourDate.setHours(0, -YourDate.getTimezoneOffset(), 0 0);

这将是一个正确的日期。

于 2013-09-20T08:48:49.893 回答