定時任務

/**
 * 定時任務
 * 例子: 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);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章