首先我们应该明白js是客户端执行的,所以,js的一切关于时间的函数,如Date.now()都是以客户端为准的,而当我们有倒计时的需求时,不可能以客户端的时间为准,如果客户端时间不予网络时间一致,整个项目就完蛋了,所以我们需要获取服务端时间
我们获取服务器时间是发起ajax请求,然后获取请求头即header为准的
两种方案:
由于我们获取到的是英文时间,与中国时间相差8个小时,所以我们先定义一个格式化时间的方法
function dateTimeFormate(date){
if(!date){
return
}else{
var d = new Date(date);
var year = d.getFullYear();
var month = ('0' + (d.getMonth() + 1)).slice(-2);
var day = ('0' + (d.getDate())).slice(-2);
var hour = ('0' + (d.getHours())).slice(-2);
var minutes = ('0' + (d.getMinutes())).slice(-2);
var seconds = ('0' + (d.getSeconds())).slice(-2);
return year + "-" + month + "-" + day + " " + hour + ":" + minutes + ":" + seconds;
}
}
1,原生:
function getServerTime(){
return new Promise((resolve,reject)=>{
var xhr = new XMLHttpRequest();
if( !xhr ){
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
xhr.open("HEAD",location.href,true);
xhr.onreadystatechange=function(){
if( xhr.readyState == 4 && xhr.status == 200 ){
resolve(xhr.getResponseHeader("Date"))
}
}
xhr.send(null);
})
}
2,jQuery:
$.ajax({async:false}).getResponseHeader("Date")
可以看出这两种的结果是一样的,(前提网速够快,两则请求时间间隔短)
然后在格式化