📅  最后修改于: 2023-12-03 15:07:56.954000             🧑  作者: Mango
有时候我们需要在一天的特定时间调用某个 javascript 函数,比如每天的凌晨 3 点执行一次数据备份。在这种情况下,我们可以使用定时器计时到指定时间,然后调用函数。
使用 setInterval 定时器可以在每隔一定时间执行一次函数。为了在一天中的特定时间执行函数,我们需要计算当前时间和指定时间之间的时间差,然后使用 setInterval 定时器延时执行函数。
function runAtSpecificTime(func, hour, minute, second) {
var now = new Date();
var target = new Date();
target.setHours(hour);
target.setMinutes(minute);
target.setSeconds(second);
if (target < now) {
target = new Date(target.getTime() + 24 * 60 * 60 * 1000);
}
var diff = target.getTime() - now.getTime();
setTimeout(function() {
setInterval(func, 24 * 60 * 60 * 1000);
func();
}, diff);
}
上面的 runAtSpecificTime
函数接受四个参数:要执行的函数,指定的时、分、秒。该函数会计算距离下一个指定时间点的时间差,然后使用 setTimeout 延时执行函数。在函数执行后,会使用 setInterval 定时器每隔一天执行一次函数。
使用 setTimeout 定时器可以在指定的时间后执行一次函数。为了在每天的指定时间调用函数,我们可以计算当前时间和指定时间之间的时间差,然后使用 setTimeout 定时器延时执行函数。
function runAtSpecificTime(func, hour, minute, second) {
var now = new Date();
var target = new Date();
target.setHours(hour);
target.setMinutes(minute);
target.setSeconds(second);
if (target < now) {
target = new Date(target.getTime() + 24 * 60 * 60 * 1000);
}
var diff = target.getTime() - now.getTime();
setTimeout(function() {
func();
setInterval(func, 24 * 60 * 60 * 1000);
}, diff);
}
上面的 runAtSpecificTime
函数同样接受四个参数:要执行的函数,指定的时、分、秒。函数会计算距离下一个指定时间点的时间差,然后使用 setTimeout 延时执行函数。在函数执行后,会使用 setInterval 定时器每隔一天执行一次函数。
Cron 表达式是一种时间表达式,在定时任务中应用广泛。使用 Cron 表达式可以很方便地设置按照天、周、月、年等周期定时执行任务。
var CronJob = require('cron').CronJob;
function runAtSpecificTime(func, hour, minute, second) {
var cronTime = `${second} ${minute} ${hour} * * *`;
var job = new CronJob(cronTime, func, null, true, 'Asia/Shanghai');
}
上面的 runAtSpecificTime
函数同样接受四个参数:要执行的函数,指定的时、分、秒。函数会使用 Cron 表达式设置定时任务,每天在指定的时间执行函数。
在 Javascript 中,我们可以使用 setInterval 或 setTimeout 定时器,也可以使用 Cron 表达式,在每天的指定时间调用某个函数。通过这些工具,可以很方便地实现定时任务。