我们使用一种方法来计算两个日期之间的天差:
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
任何人都可以解释为什么这个结果有所不同吗?两个日期之间的天数应该与任何时区相同?
答案 0 :(得分:3)
在您的时区上的这些日期之间进行DST切换,这会增加或减少一小时,这会导致一整天的差异,就像您ceil
计算一样。
UTC不含DST,且没有额外/缺少的时间。