Thursday, April 24, 2008

如何获取服务器时间

这个比较常用,比如倒计时时,怕客户端时间不准确就会用到服务器时间。但是怎么得到呢?

<script type="text/javascript">var t1 = new Date;</script> <script type="text/javascript" src="get_server_time.asp"></script> <script type="text/javascript"><!-- var t2 = new Date; console.log('请求开始      ',t1.getTime()); console.log('请求得到的服务器数据',s_now.getTime()); console.log('服务器返回请求并执行',t2.getTime(), t2.getTime() - t1.getTime()); // --> </script>

用上面这段代码可以得到服务器时间,其中 get_server_time.asp 包含

var s_now = new Date(<%=(new Date).getTime()%>);

这个方法有个问题,那就是延迟。延迟不会很大,不超过上面 t2 - t1 的差值,在本地服务器上测试时候徘徊在 50ms。
倒计时有 2 种做法,基础都是每隔一段时间 p 执行一个函数。
一种是每次将剩余时间减去 时间间隔 p,
另一种是取客户端时间计算实际的剩余时间,然后减去服务器与客户端的时间差。
第一种方法的问题在于浏览器中的 setTimeout 和 setInterval 函数都不能绝对准确的按照给定的 p 来周期执行函数,我测试的结果是大概 10 分钟会偏差 1 到 2 秒。
第二种方法的问题在于,你不能保证用户在查看页面的同时不会修改本地系统时间。
如果结合 2 种方法,会好些,代价是牺牲一些效率。