« 持戻 | トップページ | スタートアップ・ブースト »

2021年3月 8日 (月)

毎時何分毎に実行

朝からそれなりの晴れ。

気温も時間とともに上昇。

が、午後は雲多め。

そう言えば、知らなかった。

関西って、いつの間にか春一番が吹いていたんだね。

3月2日とのことで、その日って、と思って見てみたら、朝は雨で、午後からは曇りの日だったから気付かなかったんだ。

 

Javascriptで、毎時何分毎に実行したいな、と思った。

具体的に言うと、毎時、3分、13分、23分、33分、43分、53分のように、10分毎に実行したい。

Javascriptって、時間や分指定することって出来るのかな?と思ったけれど、そういう関数はなさそう。

そういうことをしている人っていないかな?と思って検索してみたけれど、ざっくりと見た感じではいなかった。

ということで、頭を振り絞って、こんな処理を作ってみた。

function getNextMins(m) {
  var ret = 60 + 3 - m;
  var intv = 10;
  if(ret <= intv) {
    return ret;
  } else {
    return getNextMins(m + intv);
  }
}

function StartLoop() {
  LoadThis();
  var timer1 = null;
  timer1 = setInterval(LoadThis, 600000);
}

function LoadThis() {
  // 実施したい処理
}

window.addEventListener('load',function(){
  var date = new Date();
  var nextm = getNextMins(date.getMinutes());
  setTimeout(StartLoop, 60000 * nextm);
});

setTimeoutとsetIntervalという、遅延処理関数をフル(って、2つだけだけれど(笑))に活用してみた。

まず、現時刻の分を取得する。

それを、getNextMinsに渡し、そこで、次の3の付く分は何分後かを求める。

もし、今が13時18分なら、5分後に、23分になる。

その5分後に、setTimeoutで、インターバル処理をするStartLoop関数を実行。

StartLoop関数の中で、まずは、実施したい処理、LoadThis関数を実行。これが、1回目の23分になる。

次は、setIntervalで、10分毎にLoadThis関数を呼び出して実行。
そうすれば、次は33分に実行し、以下、10分毎に処理を実行することになる。

何時何分という指定をしなくても、こうしてあげることによって、指定した間隔で、希望の分の時に処理を実行出来る。

getNextMinsの中に数字を書いているけれど、これを引数にしてあげれば、汎用的になる。

今回は、3の付く分数なので、「3」にしているけれど、0の付く分数なら「0」に、5の付く分数なら「5」にすればいい。

実行間隔を変更したいなら、「10」を「5(分間隔)」とかにすればいい。

上記のものは、秒に関しては考慮していない。

よって、13時18分42秒に開始したら、次からは、13時23分42秒で実行することになる。

もし、秒をきっちりと0秒にしたいなら、

setTimeout(StartLoop, (60000 * nextm) - 1000 * date.getSeconds() - date.getMilliseconds());

という風にして、秒を巻き戻してあげればいい。

そうすれば、気持ちよく、13時23分0秒から開始される。

なかなかいいじゃない、と自分で自分を褒めてあげる。(笑)

|

« 持戻 | トップページ | スタートアップ・ブースト »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« 持戻 | トップページ | スタートアップ・ブースト »