JS倒计时程序获取准确服务器时间的几种方式

时间:2022-08-20 17:03:41

首先抛出问题:
在程序开发过程中遇到前台进行倒数计时功能的案例时,遇到了获取准确时间问题,
简单的情况:
前台获取服务器时间,直接在客户端(浏览器)进行 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)

  


此方法出现问题是,一直在向服务器发送请求,也会出现网络延迟情况发生(一次跑几秒);

先写一点后补...感冒了不太舒服