2017-04-10 65 views
2

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

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

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

为什么d1小于d2并激活window.location?按逻辑顺序d1,它比d2大11分钟。它究竟与哪个参数比较?

+0

这可能帮助:http://stackoverflow.com/questions/492994/compare-two-dates-with-javascript – Rajesh

+1

d1

+1

投票结束,因为OP的假设显然是错误的,甚至不需要答案。 –

回答

2

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

将其评估的日期与(d1.valueOf()< d2.valueOf())进行比较。 valueOf()00:00:00 UTC Thursday 1, January 1970开始之后在milliseconds中传递时间,然后进行比较。

+0

啊,好的,所以它会持续增加,当前日期总是少于未来的日期? – CodeNewb

+0

是的,因为它从一个特定的时间测量 –

+0

非常感谢,这就清楚了! :)我会标记你的答案是正确的,因为它可能在几分钟内。 – CodeNewb

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

不,错。您可以使用'<' and '>'比较日期。它是导致问题的“==”和“===”(即使日期相同,也总是返回false)。 –

+0

@SalmanA检查[Date.prototype.getTime()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime)方法返回对应的数值根据世界时间为指定日期的时间。因此,您可以将数值与'<' and '>' –

+0

进行比较我在说的是可以使用'<' and '>'(和“<=' and '> =')直接比较两个”日期“。这些运算符会在幕后调用'.valueOf()'方法,对于日期,它会返回与'.getTime()'相同的值。 OP代码是正确的,你的答案是多余的。 –