微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

仅当时区与计算机时区相同时,node-cron时区才能工作

如何解决仅当时区与计算机时区相同时,node-cron时区才能工作

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

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

据我了解,无论我的机器时区如何,该时间应在美国/纽约时间上午12:46触发。但这要等到我将时区与托管机器时间匹配后才起作用,例如,如果我的机器时区是欧洲/伦敦,并且我使用timezone: "Europe/London",那么cron将在确切时间工作。

我想为特定时区安排cron。由于我要处理的时区很少,所以每半小时运行一次cron并进行检查,效果会很有效。

解决方法

好的,所以我对此错误的背后原因感到有些震惊。 node-cron使用tz-offset来计算时区偏移量……但是该模块不考虑夏令时!因此,我相信此库从根本上来说是有缺陷的,因为 lot 的时区使用DST(当然包括America / New_York。为此引起了一些问题:https://github.com/node-cron/tz-offset/issues/8

这意味着您的cron作业将在01:46或恰好延迟一个小时运行。 现在它将在正确的时间运行大约半年,这几乎使此问题更加严重。

我建议尝试使用cron模块,该代码将非常相似,但是由于它使用luxon来计算UTC偏移量,因此可以正确处理时区。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。