美文网首页
微信小程序——时间戳与Date对象的那些事

微信小程序——时间戳与Date对象的那些事

作者: ZT_Story | 来源:发表于2020-09-04 15:43 被阅读0次

    前言

    做过web开发的小伙伴们多少会遇到时间转换问题在Chrome浏览器和Safari浏览器的不同,报错或者时间格式等等,这里我就分享一下我在开发过程中遇到的一些问题

    正文

    关于时间问题,做过日历的都知道,全球化时区处理,或者时间格式,或者时间戳转化,这里我就这几种情况一一讨论

    时区处理

    由于微信小程序的部分业务需要预定,所以会出现国外预定到国内时间会有偏差的问题,根本原因还是在于new Date(),它会获取当前系统时间,大部分手机是设置的是自动时间,所以会出现时区的偏差问题。

    思考:如果产品是某地的,那么预定时间应该为对应地的时区计算。所以需要维护定位与时区之间的关系

    关于时区计算,因为我这边只用到了北京时间的情况,举个例子:

    // 东时区为-,西时区为+
    if (timezone === void 0) { timezone = -8; }
    var offset_GMT = new Date().getTimezoneOffset();
    var nowDate = new Date().getTime() + offset_GMT * 60 * 1000 - (timezone * 60 * 60 * 1000);
    return new Date(nowDate);
    

    时间格式

    Safari浏览器中,进行new Date("yyyy-MM-dd hh:mm:ss")的时候,会出现报错Invalid Date,或者转换出问题的情况,原因是Safari并不支持此格式,所以需要调整格式化的方式。

    ECMA-262 标准中(Date Time String Format)将日期格式规定为 YYYY-MM-DDTHH:mm:ss.sssZ ,其中,T 标识时间开始,Z 为相对于UTC(协调世界时 - International Atomic Time)的时间偏移量,可为 Z, +HH:mm-HH:mm

    思考:要么正则替换为标准的/分割,要么在中间空白处加上T,看自己喜好

    new Date("yyyy-MM-ddThh:mm:ss")
    

    时间戳转化为Date对象

    看文档是支持直接毫秒数时间戳转Date对象的,正常操作也是如此。

    PS:但是在微信小程序的iOS端转过来的实际时间是UTC的时间,所以需要同步为当前时区时间,为了不影响Android的时间结果,所以通过转换2次的方式解决时间计算问题。

    // format 方法为 date格式化的类扩展方法,需要自己实现
    timestampToDate: function (timestamp) {
        let date = new Date(timestamp);
        let dateFormat = date.format("yyyy-MM-ddThh:mm:ss");
        return new Date(dateFormat)
    }
    

    ECMA-262 标准来源参考:https://www.jianshu.com/p/a11196377048

    相关文章

      网友评论

          本文标题:微信小程序——时间戳与Date对象的那些事

          本文链接:https://www.haomeiwen.com/subject/ebrzsktx.html