首页 > 解决方案 > 日期差异在 JavaScript 中无法正常工作

问题描述

日期差异无法正常工作。日期的不同2018/10/22 & 2018/10/286这个结果是正确的。但是日期差2018/10/22 & 2018/10/29是 8 这个结果是错误的。任何帮助,将不胜感激。

var date1 = new Date("2018/10/22");
var date2 = new Date("2018/10/28");
var timeDiff = Math.abs(date2.getTime() - date1.getTime());
var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24));
console.log(diffDays);

结果是 6

var date1 = new Date("2018/10/22");
var date2 = new Date("2018/10/29");
var timeDiff = Math.abs(date2.getTime() - date1.getTime());
var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24));
console.log(diffDays);

结果是 8

标签: javascript

解决方案


@ken-yn 是对的,这是欧洲夏令时问题。

2018 年 10 月 28 日凌晨 3:00,时间重置为凌晨 2:00。所以这一天更长(90000000 毫秒而不是 86400000)。这导致

timeDiff / (1000 * 3600 * 24) == 7.041666666666667

而不是 7。 Math.ceil 最多可以带来 8 ......

要解决此问题,您可以按照@tj-crowder 在评论中引用的答案中给出的建议...( JavaScript 中的TimeDiff)。

简而言之:将 timediff 舍入到最接近的整数以调整夏令时:

var date1 = new Date("2018/10/22");
var date2 = new Date("2018/10/29");
var timeDiff = Math.abs(date2.getTime() - date1.getTime());
var diffDays = Math.ceil(Math.round(timeDiff / (1000 * 3600 * 24)));
console.log(diffDays);

有关更多详细信息,您可以点击@miles 的答案链接


推荐阅读