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());
}
注意请注意@calvin 的回答:如果毫秒数大于2147483647
.
不,但您可以轻松编写自己的函数。只需计算现在与给定时刻之间的差异(以毫秒为单位),然后调用 setTimeout 即可。
像这样的东西:
setToHappen = function(fn, date){
var now = new Date().getTime();
var diff = date.getTime() - now;
return setTimeout(fn, diff);
}
编辑:删除了 1000 的额外乘法,感谢克里斯指出这一点!
由于人们正在谈论使用date
对象计算超时间隔,因此应该注意间隔参数可接受的最大值setTimeout()
是 2147483647 (2^31 - 1),因为PRIntervalTime
它是带符号的 32 位整数。结果不到25天。
您可以简单地Date.now()
从日期中减去
const myDate = new Date('...');
setTimeout(func, myDate - Date.now());