javascript - 在午夜重置变量/计数器的循环函数(moment.js,node.js)

标签 javascript node.js momentjs

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

相关文章:

javascript - 在 moment.js 中获取 EST 日期

javascript - 显示的日期不正确

javascript - td 大小影响其他行中的其他 td

javascript - 在提交表单之前检查是否选择了输入 radio ID

javascript - 如何比较依赖于语言环境的 float ?

javascript - Node.js 中数据的拆分容器

Javascript node.js 回调函数变量作用域问题

javascript - 输入掩码无法存储原始值

javascript - 无法在 JavaScript 中将字符串 BST 日期格式转换为 UTC

javascript - 将整数数组映射到对象数组