15

JavaScript で (つまり、「プラグイン」経由ではなく) すぐに利用できるものはありsetTimeoutますか?

setToHappen(function () {
    alert('Wake up!');
}, new Date("..."));

はい、new Date()既存の日付オブジェクトを単純に差し引いて (またはその逆かもしれません)、ミリ秒数を取得することでこれを実行できることはわかっていますが、それでも知りたいです。

4

4 に答える 4

29

現在から日付オブジェクトまでのミリ秒数を計算する必要があります。

function setToHappen(fn, date){
    return setTimeout(fn, date - Date.now());
}

注意@calvinの答えに注意してください:ミリ秒数が。より大きい場合、これは機能しません2147483647

于 2009-04-23T09:46:05.353 に答える
8

いいえ。ただし、独自の関数を簡単に作成できます。現在と指定された瞬間の差をミリ秒単位で計算し、それを使用してsetTimeoutを呼び出します。

このようなもの:

 setToHappen = function(fn, date){
  var now = new Date().getTime();
  var diff = date.getTime() - now;
  return setTimeout(fn, diff);
 }

編集:1000による余分な乗算を削除しました、それを指摘してくれたクリスに感謝します!

于 2009-04-23T09:44:57.087 に答える
8

人々はオブジェクトを使用してタイムアウト間隔を計算することについて話しているので、interval パラメータに受け入れられる最大値は、符号付き 32 ビット整数である2147483647 (2^31 - 1)でdateあることに注意してください。それは25日弱になります。setTimeout()PRIntervalTime

于 2009-04-23T10:04:52.890 に答える
3

Date.now()日付から単純に差し引くことができます

const myDate = new Date('...');
setTimeout(func, myDate - Date.now());
于 2019-09-06T08:55:42.620 に答える