【问题标题】:Recurring function to reset variable/counter at midnight (moment.js, node.js)在午夜重置变量/计数器的重复功能(moment.js,node.js)
【发布时间】:2014-11-19 15:06:46
【问题描述】:

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

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

提前致谢。

【问题讨论】:

  • 运行一个 cron 作业,通过 curl 或其他方式向节点应用程序发出 API 调用。
  • 抱歉,我根本没有得到这个解决方案。
  • 所有操作系统都有一个名为“cron”的实用程序,旨在定期可靠地执行某些作业。您可以设置 cron 以在每天午夜发出 HTTP 请求,例如 http://my-server/its-midnight。然后,您设置节点应用程序以侦听和处理对该 URL 的请求并执行必要的操作。
  • 啊。我懂了!谢谢你的澄清。

标签: javascript node.js momentjs


【解决方案1】:

如果您使用的是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());

相当通用,实际上取决于返回的值,您可以随时安排任何事情,非常有用,似乎有人一定想到了这一点。

节点调度

一个类似 cron 和不类似 cron 的 Node 作业调度程序。

他们做到了。也许你真正想要的是node-schedule。不过,看起来它现在并没有真正积极开发。

【讨论】:

    猜你喜欢
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    相关资源
    最近更新 更多