这是我的代码。
setTimeout(executeQuery, 5000);
我知道executeQuery
会在5秒后运行......但我想在e.getHours()+':'+e.getMinutes()
处完全运行它
console.log(e.getHours()+':'+e.getMinutes());
将显示1:30
,Iam试图运行一个函数today at 1:30
无论如何要修复此问题???
答案 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");
}
答案 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:30
是1: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);