javascript - 非 UTC 和 UTC 日期比较结果不同
问题描述
我们使用一种方法来计算两个日期之间的天数差:
function getDiffDateInDays(date1: Date, date2: Date): number {
let diffDays;
if (date1 && date2) {
const diff = date1.getTime() - date2.getTime();
diffDays = Math.ceil(diff / (1000 * 3600 * 24));
}
return diffDays;
}
在我们的 CI 运行器(运行器在具有 UTC 时间的机器上运行)和本地出现一些问题之后,我们发现我们的方法结果因时区而有所不同。
const date2 = new Date(2018, 2, 6);
const date3 = new Date(2018, 3, 12);
getDiffDateInDays(date2, date3) => -36
使用 UTC:
const date2 = new Date(Date.UTC(2018, 2, 6));
const date3 = new Date(Date.UTC(2018, 3, 12));
getDiffDateInDays(date2, date3) => -37
谁能解释一下为什么这个结果不同?两个日期之间的天数应该与任何时区相同?
解决方案
在您的时区的这些日期之间有一个 DST 切换,这会增加或减少一个小时,这会导致您计算的方式出现一整天的差异ceil
。
UTC 没有 DST,并且没有额外/缺失的时间。
推荐阅读
- node.js - 为什么multer不是目的地未定义
- bash - 如何从另一个 csv 文件的选定列动态创建新的 csv?
- python - 仅打印 Python 中的有效输入
- ios15 - 选项卡视图:标题大小的差异取决于显示模式
- twitter-bootstrap - 当其中一个部分在引导程序 4 中展开时,如何停止折叠其他部分?
- selenium - 无法使用 Selenium 4.0.0 和带有 Java 16.0.1 的 ChromeDriver 启动 Chrome 浏览器
- arrays - 按索引映射两个数组
- regex - Matlab:当有时没有匹配时,用正则表达式解析大型表或单元格数组的最有效方法是什么?
- xml - SSRS 报表服务器 XML 参数
- scala - Scala 2.13 views vs LazyList