在nodejs中运行cron作业

时间:2018-01-17 06:56:24

标签: javascript mysql node.js cron

我有这个简单的cron作业功能:

var job = new cronJob('* * * * * *', function () {
  // do some form of stuffs...
 }, function () {
     console.log('DelCron Job finished.');
 }, true, 'Asia/Calcutta');

这将每秒运行一次。

我的问题:

在mysql数据库中,我有一个名为" profsms"在此表中,我有 scheduledTime 字段。

如果scheduledTime = 18/01/2018 10.00AM

我想在那个时候动态运行那个cron作业吗?

1 个答案:

答案 0 :(得分:0)

您只需将时间更改为cronjob计划字符串。

假设字符串看起来像这样

# ┌────────────── second (optional)
# │ ┌──────────── minute
# │ │ ┌────────── hour
# │ │ │ ┌──────── day of month
# │ │ │ │ ┌────── month
# │ │ │ │ │ ┌──── year
# │ │ │ │ │ │
# │ │ │ │ │ │
# * * * * * *

由于您有(dd/mm/yyyy hour.minute(AM/PM)) (18/01/2018 10.00AM)

const convertTimeToCronJobString = (time) => {
    let retString = '';
    const dmy = time.split(' ')[0];
    const d = dmy.split('/')[0];
    const m = dmy.split('/')[1];
    const y = dmy.split('/')[2];

    const hm = time.split(' ')[1];
    const h = hm.split(';')[0];
    let min = '';
    if (hm.split(';')[1].indexOf('AM') > -1) { // AM
      min = hm.split(';')[1].replace('AM','');
    } else if (hm.split(';')[1].indexOf('AM') > -1) { // PM
      min = hm.split(';')[1].replace('PM','');
      min = String(Number(min) + 12);
    }
    return `0 ${min} ${h} ${d} ${m} ${y}` // you want to start at 0th secound
}

现在您只需要将scheduledTime发送到此函数中,这将返回一个cronjobString。使用该字符串来安排任务。