0

嗨,我正在使用 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 点触发,这是因为我的时区是 UTC + 8,所以日期的默认时区是 UTC。

所以

我尝试对 Node.js 使用moment-timezone模块并做类似的事情。

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 天,但找不到解决方案。

有什么方法可以实现这一点,请帮助我,在此先感谢。

4

2 回答 2

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。

于 2016-03-30T05:55:12.000 回答
0

嗨,我想出了一个这样的解决方案,请查看它并提出您的建议。

            var today = new Date();
            var hours = 15;

            if(today.getUTCHours >= hours ) {
                today.setUTCDate(today.getUTCDate()+1);
            }
            today.setUTCHours(hours,00,00);

我会检查时间,如果已经过了香港时间晚上 11 点,我会将日期更改为第二天。

于 2016-03-30T04:53:34.747 回答