LoginSignup
0
3

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-09-17

はじめに

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

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

0
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3