【问题标题】:Date comparison operator - logical issue日期比较运算符 - 逻辑问题
【发布时间】:2017-04-10 10:26:08
【问题描述】:

我有这个简单的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');
  }
}

它工作正常,但我不明白日期比较。这可能是一个“愚蠢”的问题,但我在谷歌上找不到答案。 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 分钟。它究竟比较的是哪个参数?

【问题讨论】:

标签: javascript date date-comparison


【解决方案1】:

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

在比较它评估的日期时,如果 (d1.valueOf()&lt; d2.valueOf())valueOf()00:00:00 UTC Thursday 1, January 1970 开始以来在milliseconds 中传递时间,然后进行比较。

【讨论】:

  • 啊,好吧,所以它会持续计数,并且当前日期总是小于未来的日期?
  • 是的,因为它是从特定时间开始测量的
  • 非常感谢,这很清楚! :) 我会将您的答案标记为正确,因为这可能在几分钟内完成。
【解决方案2】:

要比较两个日期,您最好使用Date.prototype.getTime() 方法,该方法根据通用时间返回与指定日期的时间相对应的数值。

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');
}

【讨论】:

  • 不,错了。您可以使用&lt;&gt; 比较日期。是 ===== 导致问题(即使日期相同也总是返回 false)。
  • @Salman 检查Date.prototype.getTime() 方法是否根据通用时间返回指定日期的时间对应的数值。因此,您可以将数值与&lt;&gt; 进行比较
  • 我的意思是两个Dates可以直接使用&lt;&gt;(以及&lt;=&gt;=)进行比较。这些运算符将在后台调用.valueOf() 方法,对于日期,该方法返回与.getTime() 相同的值。 OPs 代码是正确的,你的答案是多余的。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 2018-05-18
    相关资源
    最近更新 更多