javascript - 日期计算的奇怪错误

标签 javascript jquery date datetime

我必须计算两个日期之间经过了多少年。我的代码工作正常 - 除了非常具体的日期。

下面的代码应该为 dateEnddateEnd1 产生相同的年份差异,但它们并不相等。如果我将年份从 2003 年更改为 2004 年,它将变得相等。如果我离开年份,但从三月改为二月,它又会相等。

我想这与闰年有关,但我不知道为什么?尤其是那个时期有4个闰年,但是对于相差仅一天的日期,年份会出现误算。

在这两种情况下,我预计年份差异为 12,但是在第一种情况下,我使用 dateEnd 变量得到 13

var dateStart = '2003,03,11';
var dateEnd = '2016,03,10';
var dateEnd1 = '2016,03,09';

var difference = (new Date(dateEnd)).getTime() - (new Date(dateStart)).getTime();
difference = (new Date(difference)).getFullYear() - 1970;
alert('Between ' + dateStart + ' and ' + dateEnd + ' elapsed ' + difference + ' years.');
difference = (new Date(dateEnd1)).getTime() - (new Date(dateStart)).getTime();
difference = (new Date(difference)).getFullYear() - 1970;
alert('Between ' + dateStart + ' and ' + dateEnd1 + ' elapsed ' + difference + ' years.');

这是 jsfiddle 上的代码.评论中的一个人设法在他的 jsfiddle 上重现了这个问题。 !

这是我得到的变量值

dateStart time: 1047337200000
dateEnd time: 1457564400000
dateEnd1 time: 1457478000000
Time difference for the first case: 410227200000
Between 2003,03,11 and 2016,03,10 elapsed 13 years.
Time difference for the second case: 410140800000
Between 2003,03,11 and 2016,03,09 elapsed 12 years.

最佳答案

可以/不能重现的区别不是语言环境,而是时区。对我(在加利福尼亚州)而言,上述值给出:

alert(new Date(410140800000)); // "Thu Dec 30 1982 16:00:00 GMT-0800 (Pacific Standard Time)"
alert(new Date(410227200000)); // "Fri Dec 31 1982 16:00:00 GMT-0800 (Pacific Standard Time)"

如果我在格林威治标准时间或以东,第二个日期将是“1983 年 1 月 1 日星期六...”,给出不同的年数。闰年可能会进入其中,因为闰年​​的数量会影响差异中的天数。

以为如果您使用 2005/2018,您会看到同样的结果,但正如 Arjan 指出的那样,它并不是那么简单,而且确实涉及闰年。

关于javascript - 日期计算的奇怪错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15579364/

相关文章:

java - Java验证日期在当前星期

python - 按周分组,填充 'missing'周

javascript - javascript中的行是什么意思?

javascript - 无法在 VueJS 组件中使用 jquery 插件

javascript - 如何在模板标签上有条件渲染 vue.js?

javascript - 检查对象中是否存在值,如果不存在则返回键

jquery - 找出元素的高度必须正确设置最大高度的动画

date - 日期为null时,Gson setDateFormat引发异常

javascript - 无法从 jquery Mobile 导航栏重定向到另一个页面

javascript - jQuery/在另一个元素内附加一个 div 元素并定位/控制父元素