首先抛出问题:
在程序开发过程中遇到前台进行倒数计时功能的案例时,遇到了获取准确时间问题,
简单的情况:
前台获取服务器时间,直接在客户端(浏览器)进行 new Date() 进行相减操作。
出现问题:当客户端机器时间更改 此时 new Date() 时间也会随时更改(问题大了!!)
下面抛出几种结局方法:
1、自我消减法
第一次从服务端获取时间戳(或其他时间格式),分配到模板。(以下涉及代码均为简单演示,请很据实际情况修改)
$this->assign('unixTime',($stopTime - time())*1000; //分配变量到模板 (至于为什么*1000 接着看)
前端使用JS获取该变量,进行自减操作
unixTime = Number(unixTime); //强制转成整型 setInterval(function(){ var d = new Date(unixTime); // new Date() 时时间戳必须为 number 类型 var str = d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate()+" "+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds(); //组合时间格式 //此时时间格式为:2012-12-26 9:53:58 并每秒 -1 //此处为您的逻辑代码,例如把串追加到某个元素内。 unixTime-=1000; },1000)
2、实时获取法
!严重不可取!
之前遇到过有人这么用,可能是没经过大脑考虑。
原理就是一个死循环试试异步请求服务器获取时间
setInterval(function(){ $.get(url,{},function(d){ //实时请求服务器获取当前时间 // d 为服务端时间 //您的逻辑代码 }) },1000)
此方法出现问题是,一直在向服务器发送请求,也会出现网络延迟情况发生(一次跑几秒);
先写一点后补...感冒了不太舒服