您好我正在使用node.js和kue,我想将作业推迟到将来的某个时间,我所做的就是传递一个像这样的js日期对象
var today=new Date();
today.setHours(23,00,00);
var email = queue.create('email', {
title: 'Account renewal required'
, to: 'tj@learnboost.com'
, template: 'renewal-email'
}).delay(today)
.priority('high')
.save();
这种方法很有效,但作业在早上7点触发,这是因为我的timeZone是UTC + 8,所以日期的默认时区是UTC。
所以
我尝试将moment-timezone模块用于Node.js并执行类似的操作。
var today = moment().tz("Asia/Hong_Kong").toDate();
today.setHours(23,00,00);
var email = queue.create('email', {
title: 'Account renewal required'
, to: 'tj@learnboost.com'
, template: 'renewal-email'
}).delay(today)
.priority('high')
.save();
但我发现当你使用toDate()
时它忽略了时区,所以我被困在这里,我搜索了很多天2天,我找不到解决方案。
有没有办法实现这一点,请提前帮助我。
答案 0 :(得分:1)
我认为你已经回答了你的问题,但要明确一点:你的主机在UTC上运行,零偏移,当地时间是UTC + 08:00,你想要下一次它的日期是23 :00本地。
在这种情况下,您需要15:00Z的日期。因此,如果当前的UTC小时数小于15,则将其设置为15.否则,将其设置为24 + 15,使其明天为15:00,例如。
var now = new Date();
now.setHours((now.getHours() < 15? 15 : 39), 0,0,0);
这样你就可以一次性完成日期和时间。但这假设主机设置为UTC。
答案 1 :(得分:0)
您好我提出了这样的解决方案,请查看并提出您的建议。
var today = new Date();
var hours = 15;
if(today.getUTCHours >= hours ) {
today.setUTCDate(today.getUTCDate()+1);
}
today.setUTCHours(hours,00,00);
我会检查时间,如果已经过了香港时间晚上11点,我会将日期改为第二天。