编辑: - 这已在“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"
});
Run Code Online (Sandbox Code Playgroud)
根据我的理解,无论我的机器时区如何,这都应该在美国/纽约时间上午 12:46 触发。但是直到我将时区与主机时间相匹配时它才起作用,例如,如果我的机器时区是欧洲/伦敦并且我使用timezone: "Europe/London"cron 将在确切的时间工作。
我想为特定时区安排 cron。由于我处理的时区很少,所以每半小时运行一次 cron 并进行检查看起来很有效。
好的,所以我对这个错误背后的原因感到有些震惊。node-cron 使用tz-offset来计算时区偏移量……但是这个模块不考虑夏令时!所以我相信这个库从根本上是有缺陷的,因为很多时区都使用 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();
Run Code Online (Sandbox Code Playgroud)
更新:这看起来现在已经在 node-cron 中修复了。
| 归档时间: |
|
| 查看次数: |
2234 次 |
| 最近记录: |