关于javascript:苹果IOS解析ISO8601格式的日期结尾带不带Z导致时区不对的问题

ISO8601格局下,结尾不带Z的日期,应为以后时区的工夫,但苹果IOS下浏览器new Date()时解析有bug,把它解析为了UTC工夫,导致在中国相差8小时。
比方:
2022-09-19T13:00:00 对应 Mon Sep 19 2022 13:00:00 GMT+0800 (中国规范工夫)
2022-09-19T13:00:00Z 对应 Mon Sep 19 2022 21:00:00 GMT+0800 (中国规范工夫)
如图:

然而在IOS环境下,一律解析为了 Mon Sep 19 2022 21:00:00 GMT+0800 (中国规范工夫),导致呈现问题。

能够通过批改Date结构器来解决这个问题:

if (isIOS()) { //判断是ios环境
    window.Date = class IosDate extends Date {
        constructor(v1, v2, v3, v4, v5, v6, v7) {
            var argLen = arguments.length;
            if (argLen === 0) super();
            else if (argLen === 1) super(v1);
            else super(v1, v2, v3, v4, v5, v6, v7);
            if (argLen === 1 && /\d+\-\d+\-\d+T\d+:\d+:\d+\.?\d*$/.test(v1)) {
                this.setMinutes(this.getMinutes() + new Date().getTimezoneOffset())
            }
        }
    }
}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理