2016-03-30 12 views
0

こんにちは、私はnode.jsとkueを使って作業しています。これを次のようにjs dateオブジェクトに渡しますタイムゾーンを考慮してJSの日付オブジェクトを作成する方法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(); 

これはうまく動作しますが、仕事は私のタイムゾーンはUTC + 8であるため、つまり、7.00時にトリガー、その日付のデフォルトのタイムゾーンは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: '[email protected]' 
     , template: 'renewal-email' 
    }).delay(today) 
     .priority('high') 
     .save(); 

しかし、あなたはそれがタイムゾーンを無視toDate()を使用するので、私はここで立ち往生していたときに私が見つけたが、私は2日間多くのことを検索し、私は解決策を見つけることができませんでした。

これを達成する方法はありますか、事前に感謝してください。

+0

あなたが実際に望むのは、そのタイムゾーンを使って '23:00'を解析し、それを日付オブジェクトに設定しないことです。 – Bergi

+0

私はそう思います、それを行う方法はありますか? –

+1

おそらく翌日の07:00に実行されていると思われます。あなたのタイムゾーンのオフセットで時刻を調整してください。 'today.setMinutes(today.getMinutes()+ today.getTimezoneOffset())'はDateから8時間(javascriptのタイムゾーンは-ve + UTCです)を引いて、予想される時間(およびmoment.jsを使用しないでください)。 – RobG

答えて

0

こんにちは、私はこのような解決策を思いつきました、それを確認し、あなたの提案をしてください。

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

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

私は時間をチェックし、すでに午後11時00分を過ぎている場合は、翌日に変更します。

+1

それはよさそうだね。 'UTCDate'を使う代わりに' hours + = 24'を実行することもできます。また、 '15 /'に '/ 23''Clock in Asia/Hong Kong 'のようなコメントを追加することもできます。 – Bergi

+1

ただし、これは選択したタイムゾーンでの夏時間を考慮しないことに注意する必要があります。あなたがそれを持っているかどうか、またはそれが期待されるかどうかはわかりません。 – Bergi

1

あなたの質問に答えたと思いますが、あなたのホストはゼロオフセットでUTCで実行されています。あなたの現地時間はUTC + 08:00で、次回の予定です23:00ローカル。

この場合、15:00Zの日付が必要です。したがって、現在のUTC時間が15未満の場合は15に設定します。それ以外の場合は、明日15:00になるように24 + 15に設定します。

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

こうして、あなたは一度に日付と時刻を行います。しかし、これは、ホストがUTCに設定されていることを前提としています。

+1

'... UTCHours'を使うべきです。何も想定する必要はなく、期待どおりに動作します。 – Bergi

関連する問題