Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript日期差异错误?_Javascript_Date - Fatal编程技术网

Javascript日期差异错误?

Javascript日期差异错误?,javascript,date,Javascript,Date,编辑:正如马丁指出的,这不是一个bug。我刚过夏令时,所以有1小时的差异 我想计算“2010年3月29日”和“2010年3月9日”之间的天数差,因此我有以下代码: ((new Date(2010, 2, 29)).getTime() - (new Date(2010, 2, 8)).getTime()) / 86400000 86400000是一天中的毫秒数,日期之间的差异以毫秒为单位返回,因此这应该可以工作。只是不太好。我明白了 20.958333333333332 这两个日期之间的差异是

编辑:正如马丁指出的,这不是一个bug。我刚过夏令时,所以有1小时的差异

我想计算“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以及Windows7上的IE8上看到了这一点。没有尝试过其他浏览器


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

您正在跨越夏令时边界,因此存在1小时的差异。

夏令时使日期计算成为一件棘手的事情。这意味着每年363天是24小时,一天是25小时,一天只有23小时。就我个人而言,我投票赞成废除夏令时

在Java中,有一个GregorianCalendar类,它在不考虑DST的情况下正确地执行日期算术。我想这在Javascript中没有多大帮助。

(我看到您看到了dst的变化)

任何javascript分区都可能出现浮点问题——设置所需的“精度”

您不需要自己获得时间-javascript将为您完成转换

+((new Date(2010, 2, 29) - new Date(2010, 2, 8))/ 86400000).toFixed(2)
/*返回值:(数字) 20.96(当地时间。可能是您想要的时间-否则,设置UTC日期部分)
*/

你的第二个日期是2010年3月8日。是的,你说得对:)我在日期差上加了3600000,结果除法正确。我真傻,竟然让这件事溜走了。DST是今年3月14日在美国举行的。它包含在两个范围内,不是吗?我在马其顿,所以我想在我的机器上它是不同的。DST应该在3月28日凌晨1点在马其顿。。。这是有道理的。我也可以对结果使用Math.round(),因为1h的差值永远不足以给出舍入误差。我想知道哪一个更快?