У меня есть эта простая функция задания cron:
var job = new cronJob('* * * * * *', function () {
// do some form of stuffs...
}, function () {
console.log('DelCron Job finished.');
}, true, 'Asia/Calcutta');
Это будет выполняться каждую секунду.
Мой вопрос:
В базе данных mysql у меня есть одна таблица с именем "profsms" в этой таблице, у меня есть поле scheduleTime.
Если запланированоTime = 18/01/2018 10.00AM
Я хочу запустить эту работу cron к тому времени динамически, возможно ли это?
Вам просто нужно изменить время на строку расписания 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. Используйте эту строку для планирования вашей задачи.