时间戳转换,JS如何解决时区问题

由于本公司进军越南,服务器在中国,业务也开始在那边发展了起来,中途遇到许多问题,本次就对时区问题进行处理。
问题:有同事反馈导入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);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
        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()) + ' ';
        // var h = date.getHours() + ':';
        // var m = date.getMinutes() + ':';
        // var s = date.getSeconds();
        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);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值