首页 > 解决方案 > 非 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

谁能解释一下为什么这个结果不同?两个日期之间的天数应该与任何时区相同?

标签: javascript

解决方案


在您的时区的这些日期之间有一个 DST 切换,这会增加或减少一个小时,这会导致您计算的方式出现一整天的差异ceil

UTC 没有 DST,并且没有额外/缺失的时间。


推荐阅读