3.node简单的定时任务时间处理

需求描述:需要一个脚本执行数据库操作。具体的操作按照实际要求来。现在要求这个脚本能能够在指定的时间周期的时间点执行这段脚本。现将相关示例代码分享出来。

function run() {
    var begin_hour = '11:05:00';/**开始时间点*/
    var cycle_time =24 * 60 * 60 * 1000;/**默认周期1天*/
    var curr_date = new Date().format('yyyy-MM-dd');/* 当前日期 */
    var curr_time = new Date().getTime();/* 当前时间时间戳 */

    var curr_run_time = new Date(curr_date + ' ' + begin_hour).getTime();/* 当前日期拼接开始执行时间 */

    var diff_time = curr_run_time - curr_time;/* 当前日期执行时间点与当前时间的时间差 */
    var ms = cycle_time;/* 距离下次执行时间的时间差 */

    if (diff_time >= 0) {/* 时间差大于0,证明执行时间是在当前时间之后 */
        ms = diff_time;
    } else {
        ms = cycle_time - Math.abs(diff_time);
    }

    /* 第一次执行使用算出的时间差,后面的执行采用固定天数的毫秒数执行 */
    var timer = setInterval(function () {
        doWork();/*具体的数据库操作*/
        clearInterval(timer);

        timer = setInterval(function () {
            doWork();
        }, parseInt(cycle_time));
    }, ms);
}

需要注意的是,使用setInterval()或者setTimeout( )做定时器的时候,当设定的时间在24天左右的时候这个方法就会无视时间间隔,直接doWork()方法。所以,当定时的时间间隔过长的时候,这个方法并不适用。

原文地址:https://www.cnblogs.com/Nick-Hu/p/9473333.html