16

自分のページで気象サービスからの情報を更新しようとしています。情報は毎正時に更新する必要があります。毎正時に関数を呼び出すにはどうすればよいですか?

アイデアはありましたが、実際にそれを改良する方法がわかりません...私が念頭に置いていたのは、次のようなifステートメントを作成するようなものでした:(疑似コード)

//get the mins of the current time
var mins = datetime.mins();    

if(mins == "00"){
    function();
 }
4

6 に答える 6

7

おそらくあなたが望むのは次のようなものです:

var now = new Date();
var delay = 60 * 60 * 1000; // 1 hour in msec
var start = delay - (now.getMinutes() * 60 + now.getSeconds()) * 1000 + now.getMilliseconds();

setTimeout(function doSomething() {
   // do the operation
   // ... your code here...

   // schedule the next tick
   setTimeout(doSomething, delay);
}, start);

したがって、基本的に、ユーザーが初めてアクセスしたときに、次の「時間」までのミリ秒単位の遅延を知る必要があります。したがって、ユーザーが 8:54 (56 秒と 123 ミリ秒) にページにアクセスした場合、約 3 分後に最初の実行をスケジュールする必要があります。最初の実行が完了したら、「1 時間」ごとに呼び出します ( 60 * 60 * 1000)。

于 2013-11-07T22:05:28.103 に答える
0
// ... call your func now
let intervalId;
let timeoutId = setTimeout(() => {
  // ... call your func on end of current hour
  intervalId = setInterval(() => {
     // ... call your func on end of each next hours
  }, 3600000);
}, ((60 − moment().minutes()) × 60 × 1000) - (moment().second() * 1000));
于 2019-11-28T22:46:01.053 に答える