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