node-cron timezone 仅在时区与机器时区相同时工作

node-cron timezone working only when time-zone is same as machines time zone

编辑:- 这已在“node-cron”版本>“3.0”中得到解决

我有以下代码。 "node-cron": "^2.0.3"

cron.schedule('46 00 * * *',() => {
   //code to be executed
  console.log("Tik")
  },{
    scheduled: true,
    timezone: "America/New_York"
  });

根据我的理解,无论我的机器时区如何,这都应该在 12:46 am America/New_York 时间触发。但是直到我将时区与主机时间相匹配才起作用,例如,如果我的机器时区是 Europe/London 并且我使用 timezone: "Europe/London",cron 将在准确的时间工作。

我想为特定时区安排 cron。由于我处理的时区很少,所以 运行 每半小时执行一次 cron 并检查 dosent 看起来很有效。

好的,所以我对这个错误背后的原因感到有些震惊。 node-cron 使用 tz-offset to calculate timezone offsets... but this module does not account for Daylight Saving Time! So I believe this library is fundamentally flawed, since a lot of timezones use DST (including, of course America/New_York. Issues have been raised for this: https://github.com/node-cron/tz-offset/issues/8.

这意味着您的 cron 作业将 运行 在 01:46 或刚好晚一小时。 现在它会运行在适当的时候持续大约半年,这几乎使这个问题变得更糟。

我建议尝试 cron module, the code will be very similar, but will deal with timezones properly, since it uses luxon 来计算 UTC 偏移量。

const CronJob = require('cron').CronJob;
const job = new CronJob('46 00 * * *', () => {
    console.log('Tik');
}, null, true, 'America/New_York');
job.start();

更新: 这看起来现在已在 node-cron 中修复。