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 (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())
}
}
}
}