19

javascript愛好家には、

分ごとに発砲するようにsetTimeOut(または)ハンドルをどのようにプログラムしますか?setIntervalたとえば、現在の時刻の51秒の場合は、9秒で発射し、14秒の場合は、46秒で発射します。

ありがとう

4

11 に答える 11

26
var date = new Date();

setTimeout(function() {
    setInterval(myFunction, 60000);
    myFunction();
}, (60 - date.getSeconds()) * 1000);

明らかに、これは 100% 正確ではありませんが、ほとんどの場合、これで十分なはずです。

于 2010-04-05T17:20:11.043 に答える
8
var nextTick = function() {
  return 60000 - (new Date().getTime() % 60000);
}, timerFunction = function() {
  // do stuff
  // do stuff
  // do stuff
  setTimeout(timerFunction, nextTick());
};
var timeout = setTimeout(timerFunction, nextTick());
于 2010-04-05T17:27:46.303 に答える
1
var seconds = (new Date()).getSeconds();

60-secondsタイムアウト時間として使用します。確かに、setTimeoutミリ秒を指定できます。つまり、ミリ秒もチェックする必要がありますが、これにより、ほとんどのアプリケーションで「十分に近い」結果が得られます。どちらかといえば、これにより分をオーバーシュートする必要がありますが、アンダーシュートするよりもオーバーシュートする方が適切です。この方法では、アンダーシュートは壊滅的な障害を引き起こします。

于 2010-04-05T17:18:02.897 に答える
1
var d = new Date();
var milisecondsUntilMinuteChanges = 60000 - d.getMilliseconds() - (1000 * d.getSeconds());
于 2010-04-05T17:23:07.840 に答える
0
function waitForNewMinute() {
    if (new Date().getSeconds()>1) {
        setTimeout(waitForNewMinute, 500);
    } else {
        setInterval(doMyThing,60000);
    } 
}

waitForNewMinute();
于 2010-04-05T17:33:14.030 に答える