Javascript日期差异错误?

时间:2010-03-05 14:01:56

标签: javascript date

编辑:这不是马丁指出的错误。我只是穿越夏令时,因此差一点。

我想计算“2010年3月29日”和“2010年3月9日”之间的天数差异,所以我有以下代码:

((new Date(2010, 2, 29)).getTime() - (new Date(2010, 2, 8)).getTime()) / 86400000

86400000是一天中的毫秒数,并且以毫秒为单位返回日期之间的差异,因此这应该有效。只是它并不完全。我得到了

20.958333333333332

这两个日期之间的区别是错误的。它应该是1814400000(21天86400000),但它实际上是1810800000。

此外,如果我改变差异:

((new Date(2010, 2, 28)).getTime() - (new Date(2010, 2, 7)).getTime()) / 86400000

同样的差异,只有一天回来,我得到了正常的结果。

只有当我们试图得到(x-y)x时,2010年3月29日之后,y出现在2010年3月29日之前,才会发生这种情况。

我在Mac上的Safari 4和Firefox 3.6以及Windows 7上的IE 8上都有这个。没有尝试过其他浏览器。

我做错了什么或这是一个已知的错误?

3 个答案:

答案 0 :(得分:11)

你正在越过夏令时的边界,因此有1小时的差异。

答案 1 :(得分:2)

夏令时使日期算术变得棘手。这意味着每年363天是24小时,一天是25小时,一天只有23小时。我个人投票赞成取消夏令时。

在Java中,有一个GregorianCalendar类,尽管有DST,它仍能正确计算日期算术。我想这在Javascript中没什么用。

答案 2 :(得分:2)

(我看到你抓住了dst的变化)

任何javascript划分都容易出现浮点问题 - 设置你需要的'准确性'。

您不需要自己花时间--javascript会为您进行转换。

+((new Date(2010, 2, 29) - new Date(2010, 2, 8))/ 86400000).toFixed(2)

/ *返回值:(Number) 20.96(当地时间。可能是您想要的 - 否则,设置UTC日期部分) * /