博客 / 詳情

返回

蘋果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 (中國標準時間)
如圖:
image.png

但是在IOS環境下,一律解析為了 Mon Sep 19 2022 21:00:00 GMT+0800 (中國標準時間),導致出現問題。

可以通過修改Date構造器來解決這個問題:

if (new Date('2022-02-02T08:00:00').valueOf() == new Date('2022-02-02T08:00:00Z').valueOf()) { //判斷環境
    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())
            }
        }
    }
}
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.