这个比较常用,比如倒计时时,怕客户端时间不准确就会用到服务器时间。但是怎么得到呢?
<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 种方法,会好些,代价是牺牲一些效率。