Skip to content

前言


  • 场景一:

    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'

解决


  • 场景一:

    js
    var dateString = '2020-8-5 09:23:20'
    dateString = dateString.replace(/-/g, '/') // 替换成 “/” 格式
  • 场景二:

    js
    new Date('2020-8-3') // 使用(补齐)完整的日期格式
  • 场景三:

    js
    +new Date('2023/10/8') // 1696694400000 统一使用 '/' 作为分隔符

注意

  • 以下现象,不属于 iOS 的问题,放在本节中为了方便归纳,具体表现如下:

    js
    new 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 (中国标准时间)

如有转载或CV请标注本站原文地址