系统在前端需要做一个 倒计时!
然后 将 后台传递到 前端的 时间字符串,创建 date 对象,然后 获取 毫秒数 来进行
计算 倒计时!
可是没有注意到 date 的getTime() 的时区问题, 这样电脑设置不同时区的地方,倒计时显示的倒计时时间就不一样了。
之前都没有注意到这个问题,还好测试发现了这个BUG。
虽然用户一般都是在中国时区的, 但是也是一个 隐藏BUG不是?
/*
* 实际服务器当时时间=页面一开始打开时的服务器时间+(当前客户端时间-一开始时打开页面是的客户端时间)
* 剩余时间=结束时间-实际服务器当时时间
var order_id=${order_id};//订单ID
var service_time=${service_time};//系统时间
var end_time=${end_time};//结束时间
*/
var clientStartTime=new Date();
function showtime(){
var endyear=end_time.substring(0,4);
var endmonth=end_time.substring(5,7);
var endday=end_time.substring(8,10);
var endhms=end_time.substring(11,19);
//实际服务器当时时间=页面一开始打开时的服务器时间+(当前客户端时间-一开始时打开页面是的客户端时间)
var sTime=service_time+(new Date().getTime()-clientStartTime.getTime());
var enddate=endyear+"/"+endmonth+"/"+endday+" "+endhms;
var eTime=new Date(enddate);
var sumSecond=parseInt((eTime.getTime()-sTime)/1000);/*sumSecond=sumSecond+(24*60*60);*/
//计算倒计时
var showSecond=sumSecond%60;
var sumMinute=(sumSecond-showSecond)/60;
var showMinute=sumMinute%60;
var sumHour=(sumMinute-showMinute)/60;
var showHour=sumHour%24;
var showData=(sumHour-showHour)/24;
if(sumSecond>-1){
$("#d").html(showData);
$("#h").html(showHour);
$("#m").html(showMinute);
$("#s").html(showSecond);
timerID=setTimeout("showtime()",1000);
}else{
$("#d").html(0);
$("#h").html(0);
$("#m").html(0);
$("#s").html(0);
}
}
可以看到 上面的 eTime.getTime() 这个没有设置时区,所以就出现时区的BUG。
所以要么在这里设置时区,要么通过 后端将 这个时间的 毫米数都给前端
可以参考网友的 :date和时区区别
所以在前端一些比较重要的功能或者操作的时候,一定要注意时区的问题