作成するJavaScript タイマーは不正確になることを最初に知っておく必要があります。これは、ここに非常にうまくまとめられた無数の理由によるものです。
すばらしいことに、反復ごとにユーザーのシステム時間を簡単にチェックすることで、スクリプトの不正確さを制限できます。はい、ユーザーのシステム時刻。
あなたの状況では、経過時間 (01:30:10) に関心があるため、これは問題ではありませんが、特定の瞬間を待っている場合は、タイムゾーンの違いを処理する必要があります。ユーザーのコンピュータの時計を設定します。
また、理解する必要があるのは、これがセキュリティの問題である場合、スクリプトをロードした後のシステム クロックへの変更を考慮することができないということです。
例:一部のサイトでは、特定のアクションを実行する前に待機する必要があります。しかし、時計を早めると、ほとんどの場合、不十分なセキュリティを回避するのに役立ちます。ほとんどの場合、二次チェックはサーバー側で行われるため、そうではありません。私が言おうとしているのは、これらのサーバー側のチェックを行うことです。
あなたの質問に答えるために、通過するのに必要な秒数を個人的に計算します。
$time = explode(':',$dbSessionDuration);# get hour, minutes, seconds to be elapsed
$time = $time[2] + $time[1] * 60 + $time[0] * 3600;# get elapse time in seconds
JavaScript ファイルでは、次のようなことができます。
(function(endTime){
endTime*=1000; // javascript works with milliseconds
endTime+=new Date().getTime();// add the current system time into the equation
// your timeSync function
(function timerSync() {
var diff = new Date(endTime - new Date().getTime());
var timer=document.getElementById('timer');
if(diff<=0)return timerEnd(timer);
timer.innerHTML =
doubleDigits(diff.getUTCHours())
+ ':' +
doubleDigits(diff.getUTCMinutes())
+ ':' +
doubleDigits(diff.getUTCSeconds())
;
setTimeout(timerSync,1000);
})();// also call it to start the timer
// your timer end function
function timerEnd(timer) {
timer.innerHTML='Timer has stopped now';
}
// double digit formatting
function doubleDigits(number) {
return number<10
? '0'+number
: number
;
}
})(
<?php echo $time;?>
);// time to elapse 1:30:10
これは実用的なフィドルですが、覚えておいてください。これは、特定のケースに最適化されていません。ページに2つのタイマーがある場合は、オブジェクトにラップすることもできますが、まったく同じように機能する関数でクロージャーメモリを2倍にしないでください。
ご不明な点がございましたら、コメントでお問い合わせください。お手伝いさせていただきます。