日期:2014-05-16  浏览次数:20358 次

js取服务器时间显示时钟
BS系统,要让原来的JS取本地时间的时钟变成取服务器的时间,这里的想法是取出服务器的时间与本地的时间相减(转为毫秒),然后每次秒变时都把这个差值算上。
对于局域网的应用,一般不用考虑取值的时间,如果是网络不稳定可以考虑把从服务器取值的时间也加进去,这样更为精确。
//用来存放差值
var differentMillisec = 0;

function init() {
    //取时间差值
	getServerDate();
	//取得显示时间
	showtime();
}

//取得显示时间
function showtime(){
	now = new Date();
	now.setTime(differentMillisec + now.getTime());
	var str = now.getYear() + "年";
	var temp = now.getMonth() + 1;
	if (temp < 10) str += "0";
	str += temp +  "月";
	temp = now.getDate();
	if (temp < 10) str += "0";
	str += temp +  "日";
	var today = new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六");
	str += " " + today[now.getDay()] + " ";
	temp = now.getHours();
	if (temp < 10) str += "0";
	str += temp +  ":";
	temp = now.getMinutes();
	if (temp < 10) str += "0";
	str += temp +  ":";
	temp = now.getSeconds();
	if (temp < 10) str += "0";
	str += temp;
	document.getElementById("Head1Right_Time").innerHTML = str;
	ctroltime=setTimeout("showtime()", 1000);
}

//从服务器取时间,用的buffalo取
function getServerDate() {
	begin = new Date();
	millisecbeg = begin.getTime();
	try {
		var buffalo = new Buffalo(endPointTop);
	        buffalo.remoteCall("desktopService.getServerDate", [], function(reply) {
	            var serverMillisec = reply.getResult();
				end = new Date();
				millisecend = end.getTime();
				differentMillisec = serverMillisec - new Date() + (millisecend - millisecbeg)/2;
	        });
	} catch (ex) {
	}	
}

    //获得服务器当前时间
    public String getServerDate() {
        return String.valueOf(System.currentTimeMillis());
    }

1 楼 mqlfly2008 2011-04-21  
这个时钟会不会在页面访问后,客户端调节了时间,从而让时间不准确呢!!!!个人认为如果是服务器时间的走表,所走的肯定就是一个服务器时间,跟客户端时间不能有关系,有关系了,表肯定会不准确的