您首先应该知道,您创建的任何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
这是一个工作小提琴,但请记住。这没有针对您的特定情况进行优化。您仍然可以将其包装在一个对象中,如果您在页面上有两个计时器,请不要将闭包内存与功能完全相同的功能加倍。
如果您有任何问题,请在评论中提问,我会尽力提供帮助。