日期比较运算符 - 逻辑问题

Date comparison operator - logical issue

我有这个简单的 js 函数:

function checkTime() {  
  var d1 = new Date();
  var d2 = new Date('April 10, 2017 12:11:00');

  if (d1 < d2) {
    $('#modalnew').modal('show');
  } else {
    window.location.replace('https://www.example.php');
  }
}

它工作正常,但我不明白日期比较。这可能是一个 "dumb" 问题,但我在 google 上找不到答案。 F.E.: - 没有代码,只是一个例子 -

d1 (now) = April 10, 2017 12:22:00
d2 (date set) = April 10, 2017 12:11:00

为什么 d1 小于 d2 而激活 window.location?按逻辑顺序 d1d2 多 11 分钟。到底比较哪个参数?

在您的情况下,d1 不小于但大于 d2,这是预期的结果,因此执行了 window.location.replace

将它评估的日期与 if (d1.valueOf()< d2.valueOf()) 进行比较。 valueOf()00:00:00 UTC Thursday 1, January 1970 开始 milliseconds 交付时间,然后进行比较。

要比较两个日期最好使用Date.prototype.getTime()方法,即returns根据世界时指定日期的时间对应的数值。

每个日期 d1d2 的结果编号将更好地解释短日期和大日期。

代码:

function checkTime() {  
  var d1 = new Date();
  var d2 = new Date('April 10, 2017 12:11:00');

  d1.getTime() < d2.getTime()
    ? $('#modalnew').modal('show')
    : window.location.replace('https://www.example.php');
}

比较 JavaScript 中的两个日期 使用 getTime() 转换您的时间,然后比较 More Detail ,Detail, Working Demo