1

我这里有问题。我如何使用像节点调度程序这样的议程在未来的某个日期时间运行作业。基于https://www.npmjs.com/package/node-schedule, node-schedule 具有 cron 风格的调度方法。所以我更容易从我的输入中提取日期。我已阅读议程文档https://github.com/rschmukler/agenda#agenda-events,它说议程使用人类间隔来指定间隔。

克朗

我怎样才能做到这一点?

4

2 回答 2

2

如果您有未来的日期,您可以将其转换为days从今天开始的数量或以下的偶数seconds,然后将其用于agendacron 作业

function findDaysDifference ( date1, date2 ) {
  //Get 1 day in milliseconds
  var oneDay_ms = 1000 * 60 * 60 * 24;

  // Convert both dates to milliseconds
  var date1_ms = date1.getTime();
  var date2_ms = date2.getTime();

  // Calculate the difference in milliseconds
  var difference_ms = date2_ms - date1_ms;
    
  // Convert back to days and return
  return Math.round(difference_ms/oneDay_ms); 
}

var futureDate = new Date(2018, 0, 1);
var daysFromNow = findDaysDifference(new Date(), futureDate);

console.log(daysFromNow);

然后创建agenda作业并使用daysFromNow上面计算的时间安排它,

agenda.define('sayHello', function(job) {
  console.log("Hello!");
});

// Schedule a job to run once at a given time
agenda.schedule(daysFromNow + ' days', 'sayHello');

如果你想在未来的特定时间安排它,你可以计算如下的秒数,

function findSecondsDifference ( date1, date2 ) { 
      var oneSecond_ms = 1000;
  
      // Convert both dates to milliseconds
      var date1_ms = date1.getTime();
      var date2_ms = date2.getTime();

      // Calculate the difference in milliseconds
      var difference_ms = date2_ms - date1_ms;
        
      // Convert back to days and return
      return Math.round(difference_ms/oneSecond_ms); 
    }

    var futureDate = new Date(2018, 0, 1, 16);
    var secsFromNow = findSecondsDifference(new Date(), futureDate);

    console.log(secsFromNow);

然后创建agenda作业并使用secsFromNow上面计算的时间安排它,

agenda.define('sayHello', function(job) {
  console.log("Hello!");
});

// Schedule a job to run once at a given time
agenda.schedule(secsFromNow + ' seconds', 'sayHello');
于 2016-12-19T16:12:10.523 回答
0

使用 Agenda.js

间隔可以是人类可读格式的字符串、cron 格式的字符串或数字。

意味着它支持cron 风格的调度方法

例如

您可以安排一个作业从当前时间开始运行 3 分钟

  await agenda.schedule('3 minutes', 'send confirmation to new user', {email:"newuser@mal.com"} );

  // Alternatively, you could also do:
  await agenda.schedule('*/3 * * * *', 'send confirmation to new user', {email:"newuser@mal.com"});
   

周一 09:00 运行工作

   await agenda.schedule('0 9 * * 1', 'MondayJob', {msg:"guess what today is 'Monday'"});

周六 23:45(晚上 11:45)运行

await agenda.schedule('45 23 * * 6', 'jobName', {});
于 2021-03-05T14:58:37.513 回答