Javascript toJSON函数从日期对象减去一天
我正在javascript中使用Javascript toJSON函数从日期对象减去一天,javascript,date,Javascript,Date,我正在javascript中使用date对象进行一些日期操作。 我花了大约一个小时来理解一个bug:在初始化之后,我使用了.toJSON()函数,我的日期减少了一个。下面是我所做工作的代码示例: var date = new Date(); console.log(date.getDate()); // print "19" date.setDate(date.getDate()-1); // print "18" var formated = date.toJSON().substr(0, 1
date
对象进行一些日期操作。
我花了大约一个小时来理解一个bug:在初始化之后,我使用了.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
现在我的问题只是“为什么?”
这可能是我的配置还是其他原因造成的
是虫子吗?如果是,这是一个已知的错误吗?这里绝对没有错误,只需检查时区。这里绝对没有错误,只需检查时区。JSON字符串以GMT为单位(这就是末尾的
Z
的意思)。你的当地时间比那早两个小时。因此,您所在时区的19日午夜是格林尼治标准时间18日的22:00。JSON字符串是格林尼治标准时间(这就是末尾的Z
的意思)。你的当地时间比那早两个小时。因此,您所在时区19日的午夜是格林威治标准时间18日的22:00。如果您仔细观察:
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-2小时
=今天-1小时,22:00:00
现在看一下:
new Date(2013, 09, 19).toJSON()
=> "2013-10-18T22:00:00.000Z"
前一天,但小时设置为22:00:00
这就是原因:从GMT+0200
切换到GMT+0
现在,对于解决方案,已经有人问过了:;) 如果你仔细观察:
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-2小时
=今天-1小时,22:00:00
现在看一下:
new Date(2013, 09, 19).toJSON()
=> "2013-10-18T22:00:00.000Z"
前一天,但小时设置为22:00:00
这就是原因:从GMT+0200
切换到GMT+0
现在,对于解决方案,已经有人问过了:;) 这是因为-2小时的时间偏移。 尽力
YourDate.setHours(0, -YourDate.getTimezoneOffset(), 0 0);
这将是一个正确的日期。这是因为-2小时的时间偏移。 尽力
YourDate.setHours(0, -YourDate.getTimezoneOffset(), 0 0);
这将是一个正确的日期。Thx我应该考虑一下……我会确认的。我希望其他答案的链接将帮助您确定解决方案;)我的解决方案是“永远不要再使用该函数”。但现在我知道\o/Thx我应该考虑一下……我会的。我希望其他答案的链接将帮助您确定解决方案;)我的解决方案是“永远不要再使用该函数”。但现在我知道了\o/