波斯码BOSSMA Information Technology

JavaScript获取服务器与客户端时间[走动]

发布时间:2007年3月5日 / 分类:JAVA / 20,638 次浏览 / 评论

考虑到有时候服务器上的时间与真实的北京时间有点偏差,而有时又会用到这两个方面,所以上网找了找,自己调试了一下,算是个总结吧。
[2007-3-16]
修正:getFullYear()替换getYear()
在以下浏览器可以使用,但未做差别对比:
IE6.0/FireFox1.5.0.5 /Flock0.7.4.1/FireFox2.0

代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>JavaScript获取服务器与客户端时间[走动]</title>
<script language="javascript" type="text/javascript">
//因程序执行耗费时间,所以时间并不十分准确,误差大约在2000毫秒以下
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", "null.txt", 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();
//获取客户端时间
localtime=new Date();
//取得时间差
var jtime=Math.abs(localtime.getTime()-severtime.getTime());
var jdate=jtime/(24*60*60*1000);
var jhour=jtime%(24*60*60*1000)/(60*60*1000);
var jminu=jtime%(24*60*60*1000)%(60*60*1000)/(60*1000);
var jsecond=jtime%(24*60*60*1000)%(60*60*1000)%(60*1000)/1000;

//格式化输出客户端时间
function getClientTime(){
localtime=new Date();
var cyear=localtime.getFullYear();
var cmonth=localtime.getMonth()+1;
var cdate=localtime.getDate();
var chour=localtime.getHours();
var cminu=localtime.getMinutes();
var cseco=localtime.getSeconds();

ccyear=addZero(cyear);
ccmonth=addZero(cmonth);
ccdate=addZero(cdate);
cchour=addZero(chour);
ccminu=addZero(cminu);
ccseco=addZero(cseco);

?cinnerdata="当前客户端时间:";
?document.getElementById("clienttime").innerHTML=cinnerdata+ccyear+"-"+ccmonth+"-"+ccdate+" "+cchour+":"+ccminu+":"+ccseco;
?document.getElementById('xctime').innerHTML="时间相差:"+Math.round(jdate)+"天"+Math.round(jhour)+"小时"+Math.round(jminu)+"分钟"+jsecond+"秒 总计:"+jtime+"毫秒";
}
//格式化输出服务器时间
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>

这篇文章主要参考了:http://www.ice8.cn/article.asp?id=39,可以说思想精髓皆来源于此。

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自波斯码,原文地址《JavaScript获取服务器与客户端时间[走动]

关键字:

建议订阅本站,及时阅读最新文章!
【上一篇】 【下一篇】

目前有4 条评论

  1. dyh 4楼:

    为什么我获取到的还是客户端时间呢?奇怪

  2. 菠萝 地板:

    非常感谢,找了很久才找到解决方案

  3. 青格儿 板凳:

    Good!!

  4. becool 沙发:

    有没有考虑不同浏览器呢?
    比如firefox, 哈哈!

发表评论