我agenda.js
在我的 Node 项目中使用,支持 MongoDB 数据库,来处理我们需要运行的批处理过程。这运作良好。但是,我确实对时区有疑问。当我使用该every()
操作时,它似乎接受了作业名称和时间表。所以我一直在为数据库播种工作,如下所示:
for (let job of dbJobs) {
await agenda.every(schedule, job.name);
}
请注意,对于上述内容,schedule
是 cron 格式 -- 00 05 * * 1-5
。
这行得通。但是,据我所知,every()
不接受repeatTimezone
. 那么在这些情况下如何计算时区呢?
澄清一下,当我在使用 添加作业后查看数据库中的文档时every()
,该repeatTimezone
属性存在,但其值设置为null
。
其他agenda
操作,如repeatEvery()
,确实接受时区参数,如下所示:
job.repeatEvery('0 6 * * *', {
timezone: 'America/New_York'
});
自从我使用 以来every()
,我一直通过首先使用 为数据库播种every()
,然后运行 MongoupdateMany()
将 timzeone 显式添加到所有作业中来管理它:
async function addTimezoneToJobs() {
try {
const db = await client.db(dbName);
await db.collection('batch_processes').updateMany({}, {
$set: {
repeatTimezone: 'America/New_York'
}
});
} catch (error) {
console.log(error);
}
}
但奇怪的是,agenda
即使我没有像我那样明确地将repeatTimezone
属性值添加到作业中,它似乎也计算了相同的时间。
我不明白这里发生了什么?运行时间是如何计算的every()
,有没有办法传入时区?
仅供参考:我与需要在数据库中设置的时区不在同一个时区。