获取服务器时间
由于客户端时间和服务器端时间不一致,需要将一个项目产品统一改成获取服务器时间,于是写了个全局方法来替换new Date()
1.创建一个getSystemTime文件注册为全局事件,
let nowTime = ''
let flag = true
let IntervalAdd = null
function getSystemTime(){
// 触发函数更新时间,为了防止一段时间内重复触发加一个节流阀
if(flag) {
flag = false
getSystemTimefun()
setTimeout(() => {
flag = true
},5000)
}
// 第一次进来没有时间,判断有时间先返回旧的时间,没有时间去触发获取服务器时间
if(nowTime) {
return JSON.parse(JSON.stringify(nowTime))
}
}
function getSystemTimefun() {
var xhr = new XMLHttpRequest();
//利用服务器接口来获取服务器时间,我这里使用了获取系统版本接口可自行修改
xhr.open('get', 'api/auth/system/version');
xhr.onreadystatechange = function () {
//等待响应完成
console.log(this.readyState === this.DONE);
if (this.readyState === this.DONE) {
//响应完毕后修改时区为东八区为准
var serverTime = xhr.getResponseHeader('Date');
var offset = new Date().getTimezoneOffset() / 60;
// 没次调用时取校准
nowTime = new Date(new Date(serverTime).getTime() + offset * 60 * 60 * 1000 + 8 * 60 * 60 * 1000);
// 获取当前服务器时间的年份
let year = nowTime.getFullYear();
// 建立一个定时器,每一秒将时间加一
if(IntervalAdd == null) {
// 设置一个自加数去校准,每过半小时去自动校准时间
let addFrequency = 0
IntervalAdd = setInterval(() => {
nowTime = new Date(nowTime.getTime() + 1000)
console.log(nowTime);
if(addFrequency >= 1800) {
addFrequency = 0
getSystemTimefun()
} else {
addFrequency++
}
},1000)
}
}
};
xhr.send();
}
export default getSystemTime
2.在app.vue中调用这个方法this.$cu.getSystemTime()第一次获取系统时间将他报错
3.每次调用时返回上一次获取的系统时间,并刷新这个系统时间