/**
* 定時任務
* 例子: dealTask(1000 * 60 * 60* 24,function(){ console.log(11) }) ; //每天固定0:00執行
*/
async function dealTask(time, task) {
console.log(`設置了一個定時任務 time ${time}`);
function getHMSTIme(time) {
let hours = parseInt(`${time / (1000 * 60 * 60)}`);
let minutes = parseInt(`${time / (1000 * 60)}`);
let seconds = parseInt(`${time / 1000}`);
return { hours, minutes, seconds };
}
function getDateTime(time) {
let date = new Date(time);
let day = date.getDay();
let hours = date.getHours();
let minutes = date.getMinutes();
let seconds = date.getSeconds();
return { day, hours, minutes, seconds };
}
let { hours, minutes, seconds } = getHMSTIme(time);
console.log(` hours${hours} minutes${minutes} seconds${seconds}`);
let nowTime = new Date().getTime();
let { hours: nowHours, minutes: nowMinutes, seconds: nowSeconds } = getDateTime(nowTime);
console.log(` nowHours${nowHours} nowMinutes${nowMinutes} nowSeconds${nowSeconds}`);
let today = new Date();
let setHours = hours == 0 ? nowHours : 0;
let setMinutes = minutes == 0 ? nowMinutes : 0;
let setSeconds = seconds == 0 ? nowSeconds : 0;
today.setHours(setHours);
today.setMinutes(setMinutes);
today.setSeconds(setSeconds);
let todayTime = today.getTime(); //獲取今天凌晨時間戳
let nextTime = todayTime + time;
while (nextTime <= nowTime) {
// console.log(nextTime)
nextTime = nextTime + time;
}
console.log(`定位到的 nextTime ${today.getTime()} setHours${setHours} setMinutes${setMinutes} setSeconds${setSeconds}`);
console.log("現在的時間是");
console.log(getDateTime(nowTime));
console.log("到下次執行任務的時間戳:" + nextTime);
console.log(getDateTime(nextTime));
let subTime = nextTime - nowTime;
console.log("現在到下次執行任務的毫秒差:" + subTime);
if (subTime >= 0) {
console.log(`等待時間執行${subTime}`);
await global.sleep(subTime);
task();
}
setInterval(() => {
task();
}, time);
}
定時任務
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.