定時任務(wù)

/**
 * 定時任務(wù)
 * 例子: dealTask(1000 * 60 * 60* 24,function(){ console.log(11) })  ; //每天固定0:00執(zhí)行
 */

async function dealTask(time, task) {
    console.log(`設(shè)置了一個定時任務(wù) 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("現(xiàn)在的時間是");
    console.log(getDateTime(nowTime));
    console.log("到下次執(zhí)行任務(wù)的時間戳:" + nextTime);
    console.log(getDateTime(nextTime));
    let subTime = nextTime - nowTime;
    console.log("現(xiàn)在到下次執(zhí)行任務(wù)的毫秒差:" + subTime);
    if (subTime >= 0) {
        console.log(`等待時間執(zhí)行${subTime}`);
        await global.sleep(subTime);
        task();
    }
    setInterval(() => {
        task();
    }, time);
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容