はじめに
毎日データを更新するような処理をNode.jsでさせたかったのですが,あまり実装例が見つからなかったので作ってみました.
ソース
//協定世界時を取得(サーバーがどこにあっても良いように)
var utc = new Date();
var offset = utc.getTimezoneOffset() * 60 * 1000;
utc = new Date(utc.getTime() + offset);
//日本時間の今日のDateを取得
var jp_current = new Date(utc.getTime() + 9 * 60 * 60 * 1000);
//日本時間の翌日の0時のDateを取得
var jp_tomorrow = new Date(utc.getTime() + 9 * 60 * 60 * 1000);
jp_tomorrow.setDate(jp_current.getDate() + 1);
jp_tomorrow.setHours(0);
jp_tomorrow.setMinutes(0);
jp_tomorrow.setSeconds(0);
//一回目のタイマー更新処理発火までの時間をミリ秒で取得
var interval = jp_tomorrow.getTime() - jp_current.getTime();
//一回目のタイマー発火
setTimeout(function() {
update();
//定期的な処理
setInterval(update(), 24 * 60 * 60 * 1000); //24時間ごとに発火
}, interval);
function update() {
//更新の処理
}
理論上はこれで動くはず.
サーバーが落ちても復活した時にまたタイマーを設定し直すので日付を超えるタイミングで処理されるはず.
コメントを受けての追記
node-scheduleというライブラリを使ったパターン
var sch = require("node-schedule");
var job = sch.scheduleJob({hour : 0, minute: 0}, function() {
//更新の処理
});
これだけでいいみたいです.