2017-09-19 13 views
1

私は以下のコードを持っていますが、21:36:00:500(500ミリ秒)で実行するにはどうすればよいですか?ミリ秒で特定の時間に関数を実行するスクリプト

var now = new Date(); 

var millisTill1 = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 23, 45, 30, 500) - now; 
if (millisTill1 < 0) { 
    millisTill1 += 86400000; 
} 
setTimeout(function() { 
    check() 
}, millisTill1); 
+1

HTML5の後に 'setTimeout'で使用できる最低値は4msです。そのしきい値よりもタイムアウトを小さくすることはできません。 – quirimmo

+0

宣言するマイクロ秒でコードを表示できますか? – alezanim

+0

ミリ秒かマイクロ秒かかりますか?タイムスタンプ "21:36:00:50"は500ミリ秒です(末尾の0は切り捨てられます)。 –

答えて

0

私はこのコードを1分間のタイマー実行のためにテストしました。また、1回実行される制限時間を加算するだけです。このコードを親切に考えてください。

tDate = new Date(); 
 
tDate.setHours(21); 
 
tDate.setMinutes(36); 
 
tDate.setSeconds(0); 
 
tDate.setMilliseconds(500); 
 

 
tMillis = tDate - new Date(); 
 

 
if (tMillis < 0) 
 
    tMillis = tMillis + 24 * 60 * 60 * 1000; // if time is greater than 21:36:00:500 just add 24 hours as it will execute next day 
 

 
setTimeout(function() { 
 
    console.log('Execute'); 
 
}, tMillis)

あなたは、出力を確認するためにタイマー先に1分を使用してコードを検証することができます。

+0

ありがとう、それは非常にうまくいっています! – alezanim

0

setTimeoutでは実行できません。 setTimeout関数では、ミリ秒単位で2番目のパラメータ(例ではmillisTill1)を渡す必要があります。

ほとんどのブラウザでは、最低しきい値が10msです。つまり、10000マイクロ秒または0.01秒を下回ることはできません。

JSがこれに適していないですが、あなたが行く必要がどこになるだろう最も一般的なタスクは、おそらくのsetIntervalを使用して、次のようになります。この1つは毎回pollingTime時間をチェックします

(setInterval(function() { 
    var currentTime = new Date(); 
    if (
    currentTime.getHours() === 1 && 
    currentTime.getMinutes() === 38 && 
    currentTime.getSeconds() === 0 && 
    currentTime.getMilliseconds() === 500 
) { 
    // your code 
    } 
}, 500))(); 

インターバルが経過する。最も一般的には1分(60000)です。低くすることはできますが、パフォーマンスの問題が発生する可能性があります。クライアント上でjavascriptを実行することを忘れないでください。 setTimeoutを使用する場合は、一度だけチェックされ、スクリプトは停止します。

何かを実行する必要がある場合は、WindowsのタスクスケジューラやOSXのAutomatorなどのシステムスケジューラの組み合わせを、bashやpythonなどのスクリプト言語を使って使用することをお勧めします。

+0

予期せぬトークンがエラーになりました&& – alezanim

+0

500ミリ秒が必要です。間違った情報を申し訳ありません。 – alezanim

+0

私はこの例を更新しました。 キャッチされないでSyntaxError:予期しないトークン) –

関連する問題