在午夜重置变量/计数器的重复功能(moment.js,node.js)

时间:2014-11-19 15:06:46

标签: javascript node.js momentjs

我想在午夜重置一个变量。每天晚上。 我尝试使用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());

我怎样才能最好让它在每晚的午夜重复出现?

提前致谢。

1 个答案:

答案 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。不过,看起来它现在并没有真正积极发展。