非UTC和UTC日期比较结果不同

时间:2018-06-14 15:12:16

标签: javascript

我们使用一种方法来计算两个日期之间的天差:

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

任何人都可以解释为什么这个结果有所不同吗?两个日期之间的天数应该与任何时区相同?

1 个答案:

答案 0 :(得分:3)

在您的时区上的这些日期之间进行DST切换,这会增加或减少一小时,这会导致一整天的差异,就像您ceil计算一样。

UTC不含DST,且没有额外/缺少的时间。