说明:
从服务端获取时间后在本地显示。有时候客户端时间会不准确,所以以服务端时间为准。此方法获取的时间有误差。
代码:
<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);
});
<完>