帮助中心

如何通过轮询方式实现获取服务器时间的方法?能用 Webscoket 进行前后通信当然更好,数据时效也更高。但如果用到轮询(即 setTimeInterval 定时刷新接口来获取数据)的时候,我们需要对时间稍稍进行一下处理,以尽可能的接近服务器时间。处理方法非常简单,就是拿到的服务器当前的时间,加上我们本地的当前时间和服务器当前时间的时间差//单独获取活动时间getServiceTime() {

当前位置: 首页  >> 新闻中心  >> 帮助中心  >> 查看详情

如何通过轮询方式实现获取服务器时间的方法

浏览量:1180 时间:2023-08-16 05:34:05

如何通过轮询方式实现获取服务器时间的方法?能用 Webscoket 进行前后通信当然更好,数据时效也更高。但如果用到轮询(即 setTimeInterval 定时刷新接口来获取数据)的时候,我们需要对时间稍稍进行一下处理,以尽可能的接近服务器时间。

处理方法非常简单,就是拿到的服务器当前的时间,加上我们本地的当前时间和服务器当前时间的时间差

序列号 CPU RAM HDD 带宽 售价(美元) 免费试用
香港服务器1 E5-2620 32G 1T HDD 50M/无限流量 $196.00 立即申请
香港服务器2 E5-2650 32G 1T HDD 50M/无限流量 $256.00 立即申请
香港服务器3 E5-2680 32G 1T HDD 50M/无限流量 $316.00 立即申请
香港服务器4 E5-2690 32G 1T HDD 50M/无限流量 $336.00 立即申请
香港服务器5 E5-2697 32G 1T HDD 50M/无限流量 $376.00 立即申请
香港服务器6 E5-2620*2 32G 1T HDD 50M/无限流量 $376.00 立即申请
香港服务器7 E5-2650*2 32G 1T HDD 50M/无限流量 $436.00 立即申请
香港服务器8 E5-2680*2 32G 1T HDD 50M/无限流量 $476.00 立即申请
香港服务器9 E5-2690*2 32G 1T HDD 50M/无限流量 $556.00 立即申请
香港服务器10 E5-2697*2 32G 1T HDD 50M/无限流量 $596.00 立即申请
香港服务器11 E5-2680v4*2 32G 1T HDD 50M/无限流量 $696.00 立即申请
香港服务器12 E5-2698v4*2 32G 1T HDD 50M/无限流量 $796.00 立即申请

//单独获取活动时间

getServiceTime() {

let serviceTimer = setInterval(function() {

this.$axios.get(……,{})

.then((response) => {

endTime = ……

startTime = ……

currentTime = ……

},(error) => {});

},6000)

}

//上面的接口以轮询的方式去获取活动开始时间、结束时间、服务器当前时间,轮询时间间隔为 n 秒,此处 n 是 6,下面是倒计时的时间处理

let timmer = setInterval(()=>{

//从单独接口获取到服务器当前时间 currentTime,活动开始时间 startTime,活动结束时间 endTime

let localTime = new Date().getTime()//本地当前时间,在本地自己 new 得到

let difTime = localTime - currentTime//接口开始传输时的服务器时间,和拿到接口数据时的本地时间,之间的差值

let cutdownTime = endTime - localTime + (difTime / n)

if(self.chazhi>0){

let day = Math.floor(self.chazhi/86400);

let hour = Math.floor((self.chazhi/3600)%24);

let min = Math.floor((self.chazhi/60)%60);

let sec = Math.floor(self.chazhi%60);

hour = hour < 10 ? "0" + hour : hour;

min = min < 10 ? "0" + min : min;

sec = sec < 10 ? "0" + sec : sec;

if(day > 0){

reuturn `距离活动结束还有${day}天${hour}小时${min}分${sec}秒`;

} else if(day <= 0 && hour > 0 ){

return `距离活动结束还有${hour}小时${min}分${sec}秒`;

} else if(day <= 0 && hour <= 0){

reuturn `距离活动结束还有${min}分${sec}秒`;

}

}else{

clearInterval(timer);

return '活动结束'

}

},1000)

有些童鞋可能会说,你这里拿了本地时间做参考,如果本地时间不准呢?或者有人恶意修改了本地时间呢?那我们得到的岂不是不准确?或者说是错误的时间?

恶意修改,确实没有办法。我们只能无条件的信任本地时间,拿它来做参考,处理这个活动倒计时。好在现在的移动端,时间都是根据时区自动获取的,不能人为修改,再加上现在 PC 互联向 移动 互联的迁徙,大部分的活动倒计时都是在移动端展现的,这应该也是我们很少在 PC 页面上看到有倒计时活动的原因吧。

我们更少看到有哪个电商网站,PC 端和 移动端 同时有倒计时活动吧?

也可能有人会发出疑问:这个时间差需要计吗?只获取一次服务器时间,然后直接在本地倒计时岂不是更好?本着精益求精的态度,我们也做了试验,在 PC 端 轮询获取服务器时间,移动端只获取一次服务器时间,做了对比。发现在最开始的一段时间(大概20分钟)里,确实是没有问题,或者说时间差感觉不到。过了 20 分钟以后,会出现几秒的时间差,再往后两者时间差越来越大。思考 了一下,在移动端只获取一次服务器时间,依靠手机的本地倒计时,这个倒计时就依赖于手机自身的性能处理了。

24小时服务器机房客服
帮助中心
  • 24H在线
  • Tg纸飞机