我正在使用Date
对象在javascript中进行一些日期操作。
我丢失了一个小时来解决一个错误:在初始化之后,我使用了.toJSON()
函数,我的日期减1。这是我正在做的代码示例:
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
现在我的问题只是“为什么?”。
这可能来自我的配置吗?
这是一个错误吗?如果是,这是一个已知的错误吗?
答案 0 :(得分:4)
如果你仔细看:
new Date(2013, 09, 19);
=> Sat Oct 19 2013 00:00:00 GMT+0200 (CEST)
这里有两件事很重要:
00:00:00
+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+0200
切换到GMT+0
。
现在有人提出解决方案:Javascript Date.toJSON don't get the timezone offset;)
答案 1 :(得分:0)
这里绝对没有错误,只需查看时区。
答案 2 :(得分:0)
JSON字符串是GMT(这就是最后Z
的含义)。您当地时间提前两个小时。所以你的时区19日午夜是格林尼治标准时间18日22:00。
答案 3 :(得分:0)
这是因为-2小时的时间偏移。 尝试做
YourDate.setHours(0, -YourDate.getTimezoneOffset(), 0 0);
这将是一个正确的日期。