使用setTimeout在指定时间激动地执行函数

时间:2014-06-27 05:54:08

标签: javascript jquery

这是我的代码。

setTimeout(executeQuery, 5000);

我知道executeQuery会在5秒后运行......但我想在e.getHours()+':'+e.getMinutes()处完全运行它   console.log(e.getHours()+':'+e.getMinutes());将显示1:30,Iam试图运行一个函数today at 1:30无论如何要修复此问题???

4 个答案:

答案 0 :(得分:2)

使用new Date(year, month, day, hours, minutes, seconds, milliseconds);设置要运行功能的日期和时间。获取当前new Date(),并减去其毫秒计数的差异,将其分配给setTimeout函数。请参阅以下代码段: -

 window.onload=function(){
  var date1=new Date();
  var date2=new Date(2014,05,27,11,45,00);
  var diff=date2.getTime()-date1.getTime();
  setTimeout(executeQuery, diff);
  }
 function executeQuery(){
  alert("hello");
  }

Fiddle

答案 1 :(得分:1)

非常直接:

var today = new Date();
var target = new Date(today.getFullYear(), today.getMonth(), today.getDate(), 1, 30, 0);
var timeout = target.getTime() - new Date().getTime();    // today variable is slightly out of date by now, if that matters

setTimeout(executeQuery, timeout);

基本上你只需要获得今天和你的目标日期的毫秒数,然后你需要将你的超时设置为:)。

编辑:请记住1:301:30am,这意味着此代码必须先执行才能工作。如果在此之后执行,它将默认为最小超时延迟(变化,但小于10ms)。一个简单的检查,看看是否超时< 0如果重置目标到明天。例如:

if (timeout < 0) {
    target = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 1, 1, 30, 0);
    timeout = target.getTime() - new Date().getTime();
}

EDIT2:另外,请记住,客户端的PC需要在整个网站上停留在您的网站上(假设这是客户端脚本)。如果你需要确保当某人在那时看到页面时发生了某些事情,那么这很好,否则就不是。

答案 2 :(得分:0)

你必须要记住,异步进程是伪异步,即当发生异步进程时(如点击,计时器触发或XMLHttpRequest),它会排队,直到有资源执行它(这在浏览器到用户之间有所不同)浏览器)。因为没有实际的线程,所以setTimeout(在你的情况下)排队等待在下一个可能的时刻执行。何时发生取决于源代码。

您可以找到关于这个主题的好读物here

答案 3 :(得分:-1)

 setInterval(function(){
 var d = new Date();
     if (d.getSeconds()==0) { 
        if (d.getMinutes()==30) {  
            if  (d.getHours()==1) {
                alert("Hello")
             }
         }
     }
 }, 1000);