每天的日程安排功能



如何让我每天早上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)

您可以使用它返回的函数取消它。

最新更新