javascript - 日期差异在 JavaScript 中无法正常工作
问题描述
日期差异无法正常工作。日期的不同2018/10/22 & 2018/10/28
是6
这个结果是正确的。但是日期差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
解决方案
@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 的答案链接
推荐阅读
- javascript - 在图形上一次显示选定的数据 js, Javascript
- abap - 更改文档中的错误时间(数据元素)
- perl - 替换偶数的 <>
- java - 我怎样才能标记和突破一个 catch 块?
- react-native - 我收到“来自本机模块的非法回调调用。此回调类型仅允许从本机代码进行一次调用。”
- python - *.pyi 文件中的代码 '_T = TypeVar('_T')' 是什么意思?
- python-3.x - 我似乎在每个唯一网页中提取 URL 时遇到问题
- selenium - 功能文件中的场景步骤被标记为具有重复的实现
- python - 如何获取字符串的最后一个单词?
- javascript - 如何根据当前视口大小选择将不同的道具发送到反应组件?