Javascript使用计划时间检查当前时间

时间:2016-02-17 08:49:21

标签: javascript date

我正在尝试在我的javascript中获取if语句。我用setInterval(function)跟踪当前时间。在此间隔中,我将计划的日期时间与当前日期时间进行比较:

首先我使用简单的if(date1 == date2)进行了检查,但我在互联网上找到了您应该使用getTime()(找到here) 我现在得到了这个但是当值相等时它仍然给出错误:

setInterval(function()
{
    console.log("current time: " + currentTime);
    console.log("end production time: " + endProdTimeMachine2);
    console.log(currentTime.getTime() === endProdTimeMachine2.getTime());

    if(currentTime.getTime() === endProdTimeMachine2.getTime())
    {
         console.log("I'm in!!!");
    }
},1000);

当我运行此代码时,我的控制台会给出结果:enter image description here

那么出了什么问题?它是间隔的东西吗?

3 个答案:

答案 0 :(得分:2)

我假设你的检查中的毫秒数不匹配,因为setInterval的开始可以是任何毫秒:

if(currentTime.getTime() === endProdTimeMachine2.getTime())

您可以更改您的代码,并仅检查此时间戳是否更大,然后清除超时,以停止进一步检查:

var interval = setInterval(function() {
    if(currentTime.getTime() >= endProdTimeMachine2.getTime()) {
         console.log("I'm in!!!");
         clearInterval(interval);
    }
}, 1000);

答案 1 :(得分:1)

问题:

1000ms间隔并不能保证您在完全相同的毫秒内读取它,实际上它是不太可能的。

您每秒都在运行该功能,但只读毫秒,因此您可以打开999ms位移。

解决方案:

为避免这种情况,请将其与endProduction范围内的999ms进行比较,以便您知道自己与该确切时刻足够接近。

范围介于-499ms+500ms之间的示例:

setInterval(function()
{
    console.log("current time: " + currentTime);
    console.log("end production time: " + endProdTimeMachine2);

    var currentTimeMs = currentTime.getTime();
    var endProdTimeMs = endProdTimeMachine2.getTime();

    if (currentTimeMs >= (endProdTimeMs - 499) && currentTimeMs <= (endProdTimeMs + 500) )
    {
         console.log("I'm in!!!");
    }
},1000);

否则,如果您需要,请将比较更改为:

if (currentTimeMs >= endProdTimeMs && currentTimeMs <= (endProdTimeMs + 999) )

答案 2 :(得分:0)

我可以举个例子:

var d1 = "abcd";
var d2 = "abcd";
console.log(d1 == d2); //prints true

d1 = new Date();
d2 = new Date(d1);
console.log(d1 == d2); //prints false

d1 = d2;
console.log(d1 == d2); //prints true

将数值与getTime()进行比较:

d1 = new Date();
d2 = new Date(d1);
console.log(d1.getTime() == d2.getTime()); //prints true