由于本公司进军越南,服务器在中国,业务也开始在那边发展了起来,中途遇到许多问题,本次就对时区问题进行处理。
问题:有同事反馈导入Excel时,越南同事的电脑本来导入的日期是2021-06-07,显示的是2021-06-06
排查问题:
1.在服务器打印导入的日期(发现正常),叫同事远程看了一下,确实有变动
2.看获取的日期数据,用时间戳在线工具测试,开发电脑均未出现异常
3.怀疑是时区的问题,于是将自己的时区改成越南的,在用测试工具测试,发现tool.lu这个网站的时间依旧正常,而有些在线转换的日期显示的是越南那边的时区。
如何解决:一定要知道如何计算时差,还有中国的时差是多少
我国的时差是-8
获取电脑时差的方法为 new Date().getTimezoneOffset() / 60
直接上代码吧,代码仅供参考不知道符不符合大家的需求,时间戳是13位的,大概是1623009600000这个样子
function timestampToTime(timestamp) {
if (isEmpty(timestamp)) {
return "";
}
var timeZoneAbroad = floatSub((new Date().getTimezoneOffset() / 60), -8);
if (timeZoneAbroad !==0) {
var timest = timeZoneAbroad * 60 * 60 * 1000;
timestamp = add(timestamp, timest);
}
var date = new Date(timestamp);
var Y = date.getFullYear() + '-';
var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';
var D = (date.getDate() < 10 ? '0'+(date.getDate()) : date.getDate()) + ' ';
return Y+M+D;
}
function add(arg1, arg2) {
return (Math.round(arg1 * 100) + Math.round(arg2 * 100)) / 100;
}
function floatSub(arg1, arg2) {
var r1, r2, m, n;
try {
r1 = arg1.toString().split(".")[1].length;
} catch (e) {
r1 = 0;
}
try {
r2 = arg2.toString().split(".")[1].length;
} catch (e) {
r2 = 0;
}
m = Math.pow(10, Math.max(r1, r2));
n = (r1 >= r2) ? r1 : r2;
return ((floatMultiply(arg1, m) - floatMultiply(arg2, m)) / m).toFixed(n);
}
function floatMultiply(arg1, arg2) {
if (arg1 == null || arg2 == null) {
return null;
}
var n1, n2;
var r1, r2;
try {
r1 = arg1.toString().split(".")[1].length;
} catch (e) {
r1 = 0;
}
try {
r2 = arg2.toString().split(".")[1].length;
} catch (e) {
r2 = 0;
}
n1 = Number(arg1.toString().replace(".", ""));
n2 = Number(arg2.toString().replace(".", ""));
return n1 * n2 / Math.pow(10, r1 + r2);
}
function floatDivide(arg1, arg2) {
if (arg1 == null) {
return null;
}
if (arg2 == null || arg2 == 0) {
return null;
}
var n1, n2;
var r1, r2;
try {
r1 = arg1.toString().split(".")[1].length;
} catch (e) {
r1 = 0;
}
try {
r2 = arg2.toString().split(".")[1].length;
} catch (e) {
r2 = 0;
}
n1 = Number(arg1.toString().replace(".", ""));
n2 = Number(arg2.toString().replace(".", ""));
return (n1 / n2) * Math.pow(10, r2 - r1);
}