需求描述:需要一个脚本执行数据库操作。具体的操作按照实际要求来。现在要求这个脚本能能够在指定的时间周期的时间点执行这段脚本。现将相关示例代码分享出来。
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()方法。所以,当定时的时间间隔过长的时候,这个方法并不适用。