JavaScript中是否有任何可用的东西(即不通过“插件”)允许我执行类似setTimeout
的操作,但是我没有说出应该发生多少毫秒的事情,而是给它一个日期对象告诉它它何时做某事?
setToHappen(function () {
alert('Wake up!');
}, new Date("..."));
是的,我知道我可以通过简单地用我现有的日期对象减去new Date()
(或者可能是相反的方式)来获得毫秒数,但我仍然想知道。
答案 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());