setTimeout但是在给定时间内

时间:2009-04-23 09:40:15

标签: javascript datetime settimeout

JavaScript中是否有任何可用的东西(即不通过“插件”)允许我执行类似setTimeout的操作,但是我没有说出应该发生多少毫秒的事情,而是给它一个日期对象告诉它它何时做某事?

setToHappen(function () {
    alert('Wake up!');
}, new Date("..."));

是的,我知道我可以通过简单地用我现有的日期对象减去new Date()(或者可能是相反的方式)来获得毫秒数,但我仍然想知道。

4 个答案:

答案 0 :(得分:20)

您必须找到现在和日期对象之间的毫秒数。

function setToHappen(fn, d){
    var t = d.getTime() - (new Date()).getTime();
    return setTimeout(fn, t);
}

答案 1 :(得分:6)

不,但你可以轻松编写自己的功能。只需用毫秒计算now和给定时刻之间的差异,然后用它调用setTimeout。

这样的事情:

 setToHappen = function(fn, date){
  var now = new Date().getTime();
  var diff = date.getTime() - now;
  return setTimeout(fn, diff);
 }

编辑:将额外的乘法移除1000,感谢克里斯指出这一点!

答案 2 :(得分:4)

由于人们正在讨论使用date个对象计算超时间隔,因此应该注意,在Firefox 中,最大值setTimeout()将接受interval参数是2147483647(2 ^ 31 - 1),因为PRIntervalTime是带符号的32位整数。那个时间不到25天。

答案 3 :(得分:2)

您只需从日期中减去Date.now()

const myDate = new Date('...');
setTimeout(func, myDate - Date.now());