2016-12-19 17 views
1

ここに問題があります。将来、ノードスケジューラのようなアジェンダを使用して、特定の日付時刻にジョブを実行しますか。 https://www.npmjs.com/package/node-scheduleに基づいて、node-scheduleにはcron形式のスケジューリング方法があります。だから私の入力から日付を抽出する方が簡単です。私はアジェンダの文書https://github.com/rschmukler/agenda#agenda-eventsを読みました。アジェンダは人間の間隔を使用して間隔を指定しています。Nodejsのアジェンダを使用して、特定の日付時刻にcron-likeジョブを実行する方法

Cron

私はこれをどのように行うことができますか?

答えて

1

あなたが将来の日付を持っている場合は、以下のように、今日かsecondsの偶数からdaysの数にこれを変換しagenda cronジョブ

function findDaysDifference (date1, date2) { 
 
    //Get 1 day in milliseconds 
 
    var oneDay_ms = 1000 * 60 * 60 * 24; 
 

 
    // Convert both dates to milliseconds 
 
    var date1_ms = date1.getTime(); 
 
    var date2_ms = date2.getTime(); 
 

 
    // Calculate the difference in milliseconds 
 
    var difference_ms = date2_ms - date1_ms; 
 
    
 
    // Convert back to days and return 
 
    return Math.round(difference_ms/oneDay_ms); 
 
} 
 

 
var futureDate = new Date(2018, 0, 1); 
 
var daysFromNow = findDaysDifference(new Date(), futureDate); 
 

 
console.log(daysFromNow);

と同じように使用することができます次に、agendaジョブを作成し、上記で計算したdaysFromNowとスケジュールしてください。

あなたが将来的に特定の時間にそれをスケジュールする場合は、次にagendaジョブを作成し、上記の計算secsFromNow

でそれをスケジュール

function findSecondsDifference (date1, date2) { 
 
     var oneSecond_ms = 1000; 
 
    
 
     // Convert both dates to milliseconds 
 
     var date1_ms = date1.getTime(); 
 
     var date2_ms = date2.getTime(); 
 

 
     // Calculate the difference in milliseconds 
 
     var difference_ms = date2_ms - date1_ms; 
 
     
 
     // Convert back to days and return 
 
     return Math.round(difference_ms/oneSecond_ms); 
 
    } 
 

 
    var futureDate = new Date(2018, 0, 1, 16); 
 
    var secsFromNow = findSecondsDifference(new Date(), futureDate); 
 

 
    console.log(secsFromNow);

、以下のように秒を計算することができます

agenda.define('sayHello', function(job) { 
    console.log("Hello!"); 
}); 

// Schedule a job to run once at a given time 
agenda.schedule(secsFromNow + ' seconds', 'sayHello'); 
+0

デフォルトでは、ジョブはその日の午前12時に実行されますか? – digit

+0

あなたのコードは私のために働いています。しかし、アジェンダに午後4時に2018年1月1日に仕事を実行するように指示するにはどうすればよいですか。あなたはアイデアを持っている? – digit

+0

はい、特定の時刻に実行したい場合は 'futureDate'で時刻を設定し、' var oneDay_ms = 60 * 24'のようにその日の分を計算し、 'agenda.schedule(daysFromNow + 'minutes'、 ' sayHello '); ' – Aruna

関連する問題