如何让我每天早上8点跑步,而不仅仅是今天早上8点
var timeIsBeing936 = new Date("04/13/2021 08:00:00 AM").getTime()
, currentTime = new Date().getTime()
, subtractMilliSecondsValue = timeIsBeing936 - currentTime;
setTimeout(getValue, subtractMilliSecondsValue);
与其永远运行javascript文件,不如使用CRON作业。否则,您可以使用小时、分钟和秒,并检查是否每秒钟都是上午8点。
var today = new Date();
var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();
setInterval(() => {
time === "8:00:00" ? /* do something */ : null
}, 1000);
您可以使用node-cron
包。
文档:https://www.npmjs.com/package/node-cron
你可以这样使用它:
const cron = require('node-cron');
cron.schedule('8 0 * * *', () => { // '8 0 * * *' => Run function every day at 8AM
yourFunction();
});
您可以使setTimeout
"递归的";(从技术上讲,这不是递归(,在触发前一个之后再次调用调度器函数。
注意:这是一个纯JS解决方案,因此它适用于所有环境,但由于
setTimeout
不准确,如果您需要高精度,这不是最佳选择。
function onTime(cb, h = 0, m = 0, s = 0, ms = 0){
let id
void function r(){
let timeUntilNextOccurrence = new Date().setHours(h, m, s, ms) - Date.now()
if(timeUntilNextOccurrence <= 0)
timeUntilNextOccurrence += 86400000
id = setTimeout(() => {
cb()
r()
}, timeUntilNextOccurrence)
}()
return function cancel(){
clearTimeout(id)
}
}
const cancel = onTime(() => console.log("It's 8 am!"), 8, 0, 0)
您可以使用它返回的函数取消它。