【问题标题】:Non UTC and UTC date comparaison result differs非 UTC 和 UTC 日期比较结果不同
【发布时间】:2018-06-14 15:12:15
【问题描述】:

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

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

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

【问题讨论】:

  • 可能要考虑使用库来执行此操作,例如 momentjs

标签: javascript


【解决方案1】:

在您所在时区的这些日期之间存在 DST 切换,这会增加或减少一个小时,这会导致一整天的差异,就像您 ceiling 计算的方式一样。

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

【讨论】:

  • 你拯救了我的一天!感谢您的解释!
猜你喜欢
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 2018-07-05
  • 1970-01-01
  • 2020-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多