如何创建一个考虑时区Node.js / javascript的JS日期对象

时间:2016-03-30 03:19:02

标签: javascript node.js date momentjs kue

您好我正在使用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天,我找不到解决方案。

有没有办法实现这一点,请提前帮助我。

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点,我会将日期改为第二天。