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())
}
}
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。