说明:
从服务端获取时间后在本地显示。有时候客户端时间会不准确,所以以服务端时间为准。此方法获取的时间有误差。
代码:
<script type="text/javascript"> <!-- var c = 0; var Y = <?php echo date('Y'); ?>, M = <?php echo date('n'); ?>, D = <?php echo date('j'); ?>; function startTime() { c++; sec = <?php echo time() - strtotime(date("Y-m-d"));?> + c; H = Math.floor(sec / 3600) % 24 I = Math.floor(sec / 60) % 60 S = sec % 60 if(S < 10) S = '0' + S; if(I < 10) I = '0' + I; if(H < 10) H = '0' + H; if (H == '00' & I == '00' & S == '00') D = D + 1; // 日进位 if (M == 2) { // 是否为二月份 if (Y % 4 == 0 && !Y % 100 == 0 || Y % 400 == 0) { // 闰年(二月有28天) if (D == 30){M += 1; D = 1;} //月份进位 }else{ // 非闰年(二月有29天) if (D == 29){ M += 1; D = 1;} //月份进位 } }else{ // 不是二月份的月份 if (M == 4 || M == 6 || M == 9 || M == 11) { //小月(30天) if (D == 31) {M += 1;D = 1;} //月份进位 }else { //大月(31天) if (D == 32){M += 1;D = 1;} // 月份进位 } } if (M == 13) { Y += 1;M = 1; } // 年份进位 document.getElementById("timer").innerHTML = Y + '-' + M + '-' + D + ' ' + H + ':' + I + ':' + S; } $(function(){ // 执行 var tmpID = setInterval("startTime()", 1000); }); --> </script> <span id="timer"></span>
后记:
正文中的提供的代码在使用中全部通过AJAX返回并添加到页面中时每AJAX一次速度加一,在单独的页面中运行正常。经检查得到了下边这些修改后的代码,可以解决速度加一的问题:
$(function(){ // 执行 tmpID = setInterval(function(){},10); // 用setInterval建立一个空函数得到目前setInterval的个数 while(--tmpID > 0) clearInterval(tmpID); // 用while清理之 var tmpID = setInterval("startTime()", 1000); // 执行 });
只显示时间,不显示年月日的完整代码:
var c = 0; function startTime() { c++; sec = <?php echo $now;?> + c; H = Math.floor(sec / 3600) % 24; I = Math.floor(sec / 60) % 60; S = sec % 60; if(S < 10) S = '0' + S; if(I < 10) I = '0' + I; if(H < 10) H = '0' + H; document.getElementById("signInTime").innerHTML = H + ':' + I + ':' + S; } $(function(){ tmpID = setInterval(function(){},10); while(--tmpID > 0) clearInterval(tmpID); var tmpID = setInterval("startTime()", 1000); });
<完>