setinterval vs settimeout

时间:2017-11-15 07:22:37

标签: javascript

如何在每天早上7:50运行倒计时器10分钟,直到每天早上8点。之后,班次将关闭。计时器将是完成工作的警告。

我现在使用了不同风格的setinterval和settimeout代码片段几个小时。但我不知道如何继续。我的主要问题是使用setinterval或setimeout。

1)setinterval:每隔几分钟检查时间是7:50还可以吗?

2)settimeout:可以计算一天中的秒数。然后在那些秒后继续调用函数?

这对我有用

window.setInterval(function() {
    var date = new Date();
    if (date.getHours() === 8 && date.getMinutes() === 0) {}
}, 60000);



var now = new Date();
var millisTill10 = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 10, 0, 0, 0) - now;
if (millisTill10 < 0) {
    millisTill10 += 86400000;
}
setTimeout(function() {
    alert("It's 10am!")
}, millisTill10);

2 个答案:

答案 0 :(得分:1)

setInterval用于在给定时间内重复回调函数,setTimeout用于在特定时间后运行回调。由于您需要创建计数器,因此可以在此处使用setInterval

注意:如果要在10分钟内每秒显示一次用户,可以使用1000作为间隔时间值。但是如果你想在10分钟的持续时间内显示每分钟,那么使用60 * 1000作为间隔时间值会更好。

setInterval(function(){
   var dateNow = new Date();
   if(dateNow.getHours() >= 7 && 
      dateNow.getMinutes >= 50 && 
      dateNow.getHours < 8)
   {
       // if the alert box isn't displayed yet
       // display it first.
       // update the display.
   }else{
       // if the alert box is displayed
       // hide it
   }
}, 1000); // or 1000 * 60 for minute based display

答案 1 :(得分:1)

每分钟运行一次计时器。如果当前时间属于您的分配范围,请显示警告。这段代码的问题在于它只能精确到一分钟 - 而不是秒。

每秒运行一次并不是一个好习惯。

setInterval(function(){

   var d = new Date();
   var h = d.getHours();
   var m = d.getMinutes();

   //Rough estimation for the time between 7.50 and 8.00 here
   if (h === 7 && m >= 50) 
      console.log('Warning!');     


}, 1000)

现在我们可以做更多......

我们可以通过以上例程来启动超时功能,该功能在间隔中将是精确的。它将在正确的时间触发倒数计时器并再设置24小时的闹钟。

var starter = setInterval(function(){

   var d = new Date();
   var h = d.getHours();
   var m = d.getMinutes();

   //Rough estimation for the time between 7.50 and 8.00 here
   if (h === 7 && m >= 50) 
      setTimeout(timer24(), 1000 * 60 * 24)  


}, 1000)


function timer24(){

   //Warn every 10 seconds
   var countdown = setInterval(function(){

       console.log('Warning!'); 

       var d = new Date();
       var h = d.getHours();

       if (h == 8)
          clearInterval(countdown)   

    }, 10)

    setTimeout(timer, 1000 * 60 * 24)

}