setTimeout但是在给定时间内

Den*_*gan 7 javascript datetime settimeout

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

setToHappen(function () {
    alert('Wake up!');
}, new Date("..."));
Run Code Online (Sandbox Code Playgroud)

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

Sim*_*mon 20

您必须找到now和date对象之间的毫秒数.

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


Pim*_*ger 6

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

像这样的东西:

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

编辑:删除额外的乘法1000,谢谢克里斯指出了!


Cal*_*vin 5

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