代码如下:
<%
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()+1nwday=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()
而服务器时间一般不会误差太大,所以最好显示服务器时间下面以asp+js为例说明。下面分析代码结构,先是获取服务器时间:var t0=new Date().getTime()var nyear=
var nmonth=
var nday=
var nwday=-1
var nhrs=
var nmin=
var nsec=
//获得本机时间和服务器时间之差
var dectime=new Date(nyear,nmonth-1,nday,nhrs,nmin,nsec).getTime()-t0nday=-1//用于显示时间的span
document.write("")
//时间计算函数:
function NewTick(){
var noww=new Date()
var t1=noww.getTime()
noww.setTime(t1+dectime)
if(noww.getDate()!=nday){
nyear=noww.getFullYear()nmonth=noww.getMonth()+1nwday=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()其他问题:服务器获取的时间不能在本地缓存,所以要在代码中加入缓存控制函数;
还要防止其他网站盗链你的服务器时间代码,所以要加入防盗链函数。
网页前端是无法获取到服务器时间的,只有通过后台取值然后进行传递。 使用Ajax每秒获取服务器的时间并显示出来,但是服务器网络延迟较高,这样误差较大。
示例采用Head的方法处理,第一次页面加载时从服务器端获得时间,以这个时间为基准,客户端再用js每秒累加。
完整代理示例:
<html><head>
<title>html网页获取服务器的时间</title>
<script language="JavaScript" type="text/javascript">
<!--程序执行需要耗费时间,误差在2秒以下-->
var xmlHttp = false
<!--获取服务器时间-->
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP")
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP")
} catch (e2) {
xmlHttp = false
}
}
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
xmlHttp = new XMLHttpRequest()
}
xmlHttp.open("GET", "
, false)
xmlHttp.setRequestHeader("Range", "bytes=-1")
xmlHttp.send(null)
severtime=new Date(xmlHttp.getResponseHeader("Date"))
<!--获取服务器日期-->
var year=severtime.getFullYear()
var month=severtime.getMonth()+1
var date=severtime.getDate()
<!--获取服务器时间-->
var hour=severtime.getHours()
var minu=severtime.getMinutes()
var seco=severtime.getSeconds()
<!--格式化输出服务器时间-->
function getSeverTime(){
seco++
if(seco==60){
minu+=1
seco=0
}
if(minu==60){
hour+=1
minu=0
}
if(hour==24){
date+=1
hour=0
}
<!--日期处理-->
if(month==1||month==3||month==5||month==7
||month==8||month==10||month==12)
{
if(date==32)
{
date=1
month+=1
}
}else if(month==4||month==6||month==9||month==11){
if(date==31){
date=1
month+=1
}
}else if(month==2){
if(year%4==0&&year%100!=0){<!--闰年处理-->
if(date==29){
date=1
month+=1
}
}else{
if(date==28){
date=1
month+=1
}
}
}
if(month==13){
year+=1
month=1
}
sseco=addZero(seco)
sminu=addZero(minu)
shour=addZero(hour)
sdate=addZero(date)
smonth=addZero(month)
syear=year
innerdata="当前服务器时间:"
document.getElementById("servertime").innerHTML=innerdata+syear+"-"+smonth+"-"+sdate+" "+shour+":"+sminu+":"+sseco
setTimeout("getSeverTime()",1000)
setTimeout("getClientTime()",100)
}
function addZero(num) {
num=Math.floor(num)
return ((num <= 9) ? ("0" + num) : num)
}
</script>
</head>
<body onLoad="getSeverTime()">
<p id="servertime"></p>
<p id="clienttime"></p>
<p id="xctime"></p>
</body>
</html>
【扩展】网页前端获取当前时间,调用date()函数即可。
示例代码:
<span id="cg"></span><script>setInterval("cg.innerHTML=new Date().toLocaleString()",1000)</script>
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)