2016-03-30 14 views
0

Merhaba node.js ve kue ile çalışıyorum, bir işi ileri bir zamana ertelemek istiyorum, bunun gibi bir js date nesnesini geçiriyorum benim Saat dilimi UTC + 8, bu nedenle tarih için varsayılan saat dilimi UTC çünküSaat dilimini dikkate alarak bir JS tarih nesnesini oluşturun Node.js/javascript

var today=new Date(); 
today.setHours(23,00,00); 

var email = queue.create('email', { 
    title: 'Account renewal required' 
    , to: '[email protected]' 
    , template: 'renewal-email' 
}).delay(today) 
    .priority('high') 
    .save(); 

Bu iyi çalışıyor ama iş 7.00 'de tetikler, olmasıdır.

yüzden

Ben moment-timezone node.js için modülü ve böyle yaparak bir şeyi kullanmaya çalıştı.

var today = moment().tz("Asia/Hong_Kong").toDate(); 
today.setHours(23,00,00); 

    var email = queue.create('email', { 
     title: 'Account renewal required' 
     , to: '[email protected]' 
     , template: 'renewal-email' 
    }).delay(today) 
     .priority('high') 
     .save(); 

Ama bunun zaman dilimini görmezden toDate() kullanmak, bu yüzden burada kaldım zaman buldum, ben 2 gün boyunca çok aranan ve ben bir çözüm bulamadık.

Bunu başarmanın herhangi bir yolu var mı, lütfen bana şimdiden teşekkürler.

+0

Gerçekten istediğiniz şey, saat dilimini kullanarak değil, tarih nesnesi ayarlayarak '23: 00' işlevini ayrıştırmaktır. – Bergi

+0

Sanırım öyle yapmanın bir yolu var mı? –

+1

Muhtemelen, ertesi gün saat 07: 00'de yürütülür. Bu yüzden, saat dilimi ofsetine göre saati ayarlayın: 'today.setMinutes (today.getMinutes() + today.getTimezoneOffset())' 8 saatten (javascript saat dilimleri-UTC için -ve-UTC için) çıkarılacaktır. beklenen süre (ve moment.js kullanmayın). – RobG

cevap

0

Merhaba, böyle bir çözüm buldum, lütfen gözden geçirin ve önerilerinizi verin.

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

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

ben saat kontrol edecek ve zaten 11:00 HK zaman geçirildiği takdirde, ben bir sonraki güne tarihini değiştirecek.

+1

Bu iyi görünüyor, evet. 'UTCDate' kullanmak yerine, ayrıca' hour + = 24' yapabilirsiniz. Ve Asya'ya/Hong Kong'a '// 23 '' 15 gibi bir yorum eklemek isteyebilirsiniz. – Bergi

+1

Ancak, bunun, seçtiğiniz saat diliminde gün ışığından yararlanma saatlerine uymadığının farkında olmanız gerekir. Bir tane olup olmadığından veya bekleyip beklemediğinden emin değilsiniz. – Bergi

1

Sanırım sorunuzu cevapladınız, ama sadece açık olmak gerekirse: ev sahibi sıfır ofseti ile UTC'de çalışıyor, yerel saatiniz UTC + 08: 00 ve bir dahaki sefere bir tarih istiyor 23:00 yerel.

Bu durumda, 15: 00Z için bir tarih istersiniz. Yani, geçerli UTC saati 15'ten azsa, 15 olarak ayarlayın. Aksi takdirde, 24 + 15'e ayarlayın, böylece 15: 00'de yarın, örn.

var now = new Date(); 
now.setHours((now.getHours() < 15? 15 : 39), 0,0,0); 

Böylece tek seferde tarih ve saati gerçekleştirirsiniz. Ancak bu, ana bilgisayarın UTC olarak ayarlandığını varsayar.

+1

'… UTCHours' kullanmalısınız, bu nedenle hiçbir şey almanız gerekmez ve beklendiği gibi çalışır. – Bergi

İlgili konular