首页 > 解决方案 > setTimeout 一天中的特定时间,然后停止直到下一个特定时间

问题描述

我正在运行以下代码,作为更广泛的代码的一部分,我希望所说的函数“tweeter”全天在 09.00、13.00、17.00 和 21.00 运行。

但是,当我运行代码时,它将正确等待“小时”,然后它将继续运行该函数,而不是停止并等待检查下一个小时是否匹配。

我希望它遵循的工作流程是

  1. 每小时运行代码
  2. 如果小时匹配 9、13、17 或 21,则运行函数
  3. 停止运行直到下一个小时检查
  4. 重复 1-2

var now = new Date();
var delay = 60 * 60 * 1000; // 1 hour in msec
var start = delay - (now.getMinutes() * 60 + now.getSeconds()) * 1000 + now.getMilliseconds();

setTimeout(function doSomething() {
  if ((now.getHours() === 9) || (now.getHours() === 13) || (now.getHours() === 17) || (now.getHours() === 21)) {
    tweeter();
  }
  setTimeout(doSomething, delay);
}, start);

标签: javascriptnode.jsfunctiondatetime

解决方案


您可以使用这样的 cron 作业检查文档

var CronJob = require('cron').CronJob;
var job = new CronJob('0 0 9,13,17,21 * * *', function() {
  tweeter();
}, null, true, 'America/Los_Angeles');
job.start();

推荐阅读