在JavaScript中,是否有任何现成的东西(即不通过“插件”)允许我做类似于setTimeout
的事情,但是我可以提供一个日期对象告诉它何时执行某些操作,而不是在多少毫秒后执行?
setToHappen(function () {
alert('Wake up!');
}, new Date("..."));
是的,我知道我可以通过将new Date()
减去我的现有日期对象(或者可能是反过来)来获取毫秒数,但我仍然想知道。
在JavaScript中,是否有任何现成的东西(即不通过“插件”)允许我做类似于setTimeout
的事情,但是我可以提供一个日期对象告诉它何时执行某些操作,而不是在多少毫秒后执行?
setToHappen(function () {
alert('Wake up!');
}, new Date("..."));
是的,我知道我可以通过将new Date()
减去我的现有日期对象(或者可能是反过来)来获取毫秒数,但我仍然想知道。
你需要计算现在与你的日期对象之间的毫秒数:
function setToHappen(fn, date){
return setTimeout(fn, date - Date.now());
}
NB 请注意 @calvin 的回答: 如果毫秒数大于2147483647
,则此方法将无法工作。
鉴于人们正在谈论使用date
对象计算超时间隔,应该注意 setTimeout()
将接受的间隔参数的最大值为2147483647(2 ^ 31-1),因为PRIntervalTime
是一个带符号的32位整数。 这相当于不到25天。
setToHappen = function(fn, date){
var now = new Date().getTime();
var diff = date.getTime() - now;
return setTimeout(fn, diff);
}
编辑:已删除额外的乘以1000,感谢Chris指出!
您可以通过从日期中减去Date.now()
来简单计算。
const myDate = new Date('...');
setTimeout(func, myDate - Date.now());