在網頁上顯示時間,如果取的是用戶本機的時間,由於用戶的時間往往不准確,所以顯示的有問題。而服務器時間一般不會誤差太大,所以最好顯示服務器時間
下面以asp+js為例說明。
下面分析代碼結構,先是獲取服務器時間:
<%
d=Date()
t=Time()
%>
var t0=new Date().getTime();
var nyear=<%=Year(d)%>;
var nmonth=<%=Month(d)%>;
var nday=<%=Day(d)%>;
var nwday=<%=WeekDay(d)%>-1;
var nhrs=<%=Hour(t)%>;
var nmin=<%=Minute(t)%>;
var nsec=<%=Second(t)%>;
//獲得本機時間和服務器時間之差
var dectime=new Date(nyear,nmonth-1,nday,nhrs,nmin,nsec).getTime()-t0;
nday=-1;
//用於顯示時間的span
document.write("<span id="clock" style="word-break:keep-all"></span>");
//時間計算函數:
function NewTick(){
var noww=new Date();
var t1=noww.getTime();
noww.setTime(t1+dectime);
if(noww.getDate()!=nday){
nyear=noww.getFullYear();nmonth=noww.getMonth()+1;nwday=noww.getDay();nday=noww.getDate();
}
nhrs=noww.getHours();nmin=noww.getMinutes();nsec=noww.getSeconds();
}
//時間顯示函數:
function Draw(){
NewTick(); //先計算
var s=nyear+'年'+nmonth+'月'+nday+'日 '+'星期'+cweekday(nwday)+' '+shapetime(nhrs,nmin,nsec);
s+=" 農歷"+lmonth+"月"+lday;//顯示農歷
document.getElementById("clock").innerHTML=s;
//每隔500毫秒重新獲取一下本機時間:
setTimeout("Draw()",500);
}
//開始顯示:
Draw();
其他問題:
服務器獲取的時間不能在本地緩存,所以要在代碼中加入緩存控制函數;
還要防止其他網站盜鏈你的服務器時間代碼,所以要加入防盜鏈函數。
如果需要顯示農歷,還需要加入農歷運算函數。