前言
场景一:
js// android +new Date('2020-8-5 09:23:20') // 1596590600000 // iOS +new Date('2020-8-5 09:23:20') // NAN
场景二:
js// android new Date('2020-8') // Sat Aug 01 2020 00:00:00 GMT+0800 (中国标准时间) // iOS new Date('2020-8') // invalid date
场景三:
js+new Date('2023/10/8') == +new Date('2023/10/08') // true +new Date('2023-10-8') == +new Date('2023-10-08') // false +new Date('2023-10-8') // 1696694400000 +new Date('2023-10-08') // 1696723200000 (就你小子挑刺) +new Date('2023/10/8') // 1696694400000 +new Date('2023/10/08') // 1696694400000
原因
- 场景一:
iOS
引擎 对于时间格式为YY-MM-DD 00:00:00
这种-
连接格式的日期不能解析
- 场景二:
- 可能是因为
iOS
的引擎对日期字符串的解析要求更严格,或者它在解析这种特定格式的日期字符串时存在一些问题
- 可能是因为
- 场景三:
- 因为
js
在处理日期字符串时非常敏感,即使日期看起来相似,日期字符串中的格式和精度也会影响时间戳的生成 - 当你使用
'/'
作为日期字符串中的分隔符时,js
会将这两个日期字符串解释为相同的日期。这是因为js
日期解析会考虑常见的日期格式,包括使用斜杠/
作为分隔符的格式 - 尽量保持同等日期位数,在日期中始终包含两位的日和月,如
'2023-10-08'
- 因为
解决
场景一:
jsvar dateString = '2020-8-5 09:23:20' dateString = dateString.replace(/-/g, '/') // 替换成 “/” 格式
场景二:
jsnew Date('2020-8-3') // 使用(补齐)完整的日期格式
场景三:
js+new Date('2023/10/8') // 1696694400000 统一使用 '/' 作为分隔符
注意
以下现象,不属于
iOS
的问题,放在本节中为了方便归纳,具体表现如下:jsnew Date('2020-08') // Sat Aug 01 2020 08:00:00 GMT+0800 (中国标准时间) new Date('2020/08') // Sat Aug 01 2020 00:00:00 GMT+0800 (中国标准时间)