我想在午夜重置一个变量。每天晚上。 我尝试使用Moment.js为Node构建此函数,但我似乎无法使重复部分正常工作。
这是我到目前为止所得到的。
// Calculate time to midnight
function timeToMidnight(){
var midnight = new Date();
midnight.setHours(0,0,0,0);
var now = new Date();
var msToMidnight = midnight - now;
console.log(' it is ' + msToMidnight + 'ms until midnight');
return msToMidnight;
};
// Reset counter at midnight
setTimeout(function(){
console.log("midnight, do something");
}, timeToMidnight());
我怎样才能最好让它在每晚的午夜重复出现?
提前致谢。
答案 0 :(得分:2)
如果您正在使用moment,请考虑使用此实现
var moment = require('moment');
function timeToMidnight() {
var now = new Date();
var end = moment().endOf("day");
return end - now + 1000;
}
与你的功能类似,这需要现在毫秒并计算到午夜之前的毫秒数,但这在使用时刻时是直接支持的,这很好。再加1秒(1000毫秒)到第二天。
典型的模式是函数在超时后调用自身。
function roundMidnight() {
console.log('at midnight');
setTimeout(roundMidnight,timeToMidnight());
}
setTimeout(roundMidnight,timeToMidnight());
非常通用,实际上取决于返回的值,你可以随时安排任何事情,非常有用,似乎有人必须想到这一点。
Node的类似cron和非cron的作业调度程序。
他们做到了。也许你真正想要的是node-schedule。不过,看起来它现在并没有真正积极发展。