我想在午夜重置一个变量。每晚。 我正在尝试使用 Moment.js for 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());
我怎样才能最好地让它在每晚午夜重复出现?
提前致谢。
最佳答案
如果您使用 moment , 请考虑这个实现
var moment = require('moment');
function timeToMidnight() {
var now = new Date();
var end = moment().endOf("day");
return end - now + 1000;
}
与您的函数一样,这需要 now 毫秒并计算到午夜的毫秒数,但是这在使用 moment 时直接支持,这很好。额外增加 1 秒(1000 毫秒)以进入第二天。
典型的模式是函数在超时后调用自身。
function roundMidnight() {
console.log('at midnight');
setTimeout(roundMidnight,timeToMidnight());
}
setTimeout(roundMidnight,timeToMidnight());
非常通用,实际上根据返回的值,您可以随时安排任何事情,非常有用,好像有人已经想到了。
Node 调度
A cron-like and not-cron-like job scheduler for Node.
他们做到了。也许你真正想要的是node-schedule .不过,看起来它现在并没有真正积极地开发。
关于javascript - 在午夜重置变量/计数器的循环函数(moment.js,node.js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27020143/