/**
* 定时任务
* 例子: 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);
}
定时任务
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 功能的实现,参考了几篇文章,在开篇,表示感谢!引用了:Mac中的定时任务利器:launchctlosx – 如果一...
- 环境: IDEA版本2017.3.1 x64, JDK1.8, SpringBoot2.1.1 异步任务 在需要开...
- 环境: IDEA版本2017.3.1 x64, JDK1异步任务.8, SpringBoot2.1.1 在需要开启...
- import threadingdef fun_timer():print('hello Timer!')glob...