#node.js #momentjs #moment-timezone
#node.js #momentjs #момент-часовой пояс
Вопрос:
У меня есть часовой пояс (timerTimeZone): например, для «Америка / Чикаго».
пусть timerTimeZone = «Америка / Чикаго»
Местное время нашего сервера указано в UTC.
Я хочу выполнять функцию каждую ночь в 12.00 в часовом поясе, который хранится в переменной timerTimeZone .
Допустим, программа запущена в 6:00 вечера по Гринвичу / 1.00 вечера по восточному времени. Таким образом, первое выполнение должно быть после 11 часов (12.00 утра по восточному времени), а последующие последующие выполнения каждые 24 часа.
Я пытался использовать moment и moment-timezone, но не смог найти никакого способа.
Ответ №1:
Я бы предложил использовать отличный модуль Cron.
Это позволяет планировать задачи в соответствии с выражением cron, а также позволяет указать часовой пояс IANA для использования.
Я также регистрирую здесь следующие 5 дат, в которые будет выполняться задание, как в указанном часовом поясе, так и в UTC.
const CronJob = require("cron").CronJob;
// Run at midnight every night
const cronExpression = "00 00 * * *";
const timeZone = "America/Chicago";
const cronJob = new CronJob(
cronExpression,
cronFunction,
null,
true,
timeZone
);
function cronFunction() {
console.log("cronFunction: Running....");
/* Do whatever you wish here... */
}
// Get the next N dates the job will fire on...
const nextDates = cronJob.nextDates(5);
console.log(`Next times (${timeZone}) the job will run on:`, nextDates.map(d => d.tz(timeZone).format("YYYY-MM-DD HH:mm")));
console.log("Next times (UTC) the job will run on:", nextDates.map(d => d.utc().format("YYYY-MM-DD HH:mm")));