JavaScript

Javascript:日付を超える度に処理を行う


はじめに

毎日データを更新するような処理を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() {
//更新の処理
});

これだけでいいみたいです.