话不多说,先上效果图
业务场景:由于公司业务涉及海外用户,客服在线时间与用户当地不相同,再加上业务广泛各个国家时区都有,所以才需要此需求
思路:通过取得用户所在地区的时间差(格林威治时间和用户时间之间的时差),然后来计算出用户所在地区的时间
踩坑:在中国,用getTimezoneOffset()方法返回出来的时间差是负8小时,可实际上中国的时间与格林威治时间应该是+8小时才对。导致我计算标准时间踩了坑
这是因为用这个方法返回出来的时间,是以当地(中国)的时间为标准,中国的时间距离标准的格林威治时间就是负的
主要代码:
//时间差,除以60就是以小时为单位
new Date().getTimezoneOffset() / 60
看看实际效果
先在data中定义变量
data() {
return {
timeText: '', //客服在线时间
timeArea: '', //客服时间时区
}
}
created() {
//在线时间
let timeCha = -(new Date().getTimezoneOffset() / 60);
// 下面的 0 和 12 是通过以中国时间为标准计算后的格林威治时间,对应的是8和20;
let stratTime = 0 + timeCha;
let endTime = 12 + timeCha;
let countNum = 0;
while (stratTime < 0 && countNum < 10) {
stratTime += 24;
countNum += 1;
}
while (stratTime >= 24 && countNum < 10) {
stratTime -= 24;
countNum += 1;
}
while (endTime < 0 && countNum < 10) {
endTime += 24;
countNum += 1;
}
while (endTime > 24 && countNum < 10) {
endTime -= 24;
countNum += 1;
}
let string_stratTime = stratTime.toString();
let string_endTime = endTime.toString();
if (string_stratTime.length < 2) string_stratTime = '0' + string_stratTime;
if (string_endTime.length < 2) string_endTime = '0' + string_endTime;
that.timeText = string_stratTime + ':00-' + string_endTime + ':00';
//用户所在地区的时区
let linshiArea = new Date().toString().split('(')[1].split(')')[0];
that.timeArea = linshiArea;
}