在javascript中在特定日期和时间之后触发一段时间

时间:2015-11-19 10:24:04

标签: javascript

我想在javascript中针对特定日期和时间触发事件。例如,

如果当前日期和时间是19-11-2015 10:00 AM,并且我在19-11-2015上午10:30设置了计时器,那么它应该在30分钟后开火。这里设定的计时器日期也可能在两天之后。

我目前的代码如下。

setTimer :function(hr  , min){


            var d1 = new Date();
            var d2 = new Date();
            console.log("Time 1 "+d1.getTime());

            d2.setMinutes(d1.getMinutes() + min);
            d2.setHours(d1.getHours() + hr);


            console.log("Time 2 "+d2.getTime());
            setTimeout(function(){

                   alert("called"); 


                },d2.getTime());
            alert("Before " + d1.getDate() + " - "+d1.getMonth() + " - "+d1.getFullYear() + "<>"+d1.getHours()+ ":"+d1.getMinutes() 
                    + "\n" +
                "After  " + d2.getDate() + " - "+d2.getMonth() + " - "+d2.getFullYear() + "<>"+d2.getHours()+ ":"+d2.getMinutes() );


        },

我用setTimer(0,1);调用它来在一分钟后启动一个计时器,但它没有被解雇。

2 个答案:

答案 0 :(得分:4)

找出使用Date函数剩余的时间,然后将其传递给setTimeout函数。不需要继续检查时间。

$(document).ready(function(){
 var d = new Date("November 19, 2015 17:00:00");
 var d1 = new Date();   
 var timelimit = (d.getTime() - d1.getTime());
    if(timelimit > 0)   {
        setTimeout(function(){
            console.log(12345);           
        },timelimit);
    }
  });

答案 1 :(得分:0)

使用setTimeout https://fiddle.sencha.com/#fiddle/11b9来创建计时器。

您最好使用setInterval并检查您是否已达到正确的时间。

function setTimer(hours, minutes) {
  var now = Date.now();

  // work out the event time in ms
  var hoursInMs = hours * 60 * 60 * 1000,
      minutesInMs = minutes * 60 * 1000;

  var triggerTime = now + hoursInMs + minutesInMs;

  var interval = setInterval(function() {
    var now = Date.now();

    if(now >= triggerTime) {
      alert('timer!');

      // clear the interval to avoid memory leaks
      clearInterval(interval);
    }
  }, 0);
}

如果您使用not a reliable way将日期作为自纪元以来的毫秒数返回,那么您将为自己省去很多麻烦。然后你可以用数字来处理问题,而不是弄乱日期api。