微信小程序中解决iOS中new Date() 时间格式不兼容

5,769 阅读1分钟

本周写小程序,遇到的一个bug,在chrome上显示得好好的时间,一到Safari/iPhone 就报错 “invalid date”,时间格式为“2019.06.06 13:12:49”,然后利用new Date() 转换时间戳时,使用微信开发工具、安手机开发版、安手机体验版都没问题,ios中无法展示。

猜想,会不会是Safari不支持yyyy-mm-dd / yyyy.mm.dd 这种格式,于是在 safari 浏览器测试一波,顺便也测试了 “2018-12-10”格式的:

safari 浏览器报错:2018.12.10 11:11:11日期格式

image.png

safari 浏览器报错:2018-12-10 11:11:11 日期格式

image.png

于是就replace正则替换

let dateStr1 = '2018.12.10 11:11:11';
let dateStr2 = '2018-12-10 11:11:11';
/* 利用正则表达式替换时间中的”-或者.”为”/”即可 */
dateToTimestamp(dateStr) {
    if (!dateStr) {
        return ''
    }
    let newDataStr = dateStr.replace(/\.|\-/g, '/')
    let date = new Date(newDataStr);
    let timestamp = date.getTime();
    return timestamp
}

this.dateToTimestamp(dateStr1)
this.dateToTimestamp(dateStr2)

后来为了验证自己的想法,上stackoverflow上查查,看到了几个类似的问题,这里挑一个有代表性的给大家看看:

Safari JS cannot parse YYYY-MM-DD date format?

大概的意思是说,在执行new Date( string ) 的时候,不同浏览器会采用不同的parse,目前chrome两种格式都支持,而Safari只支持yyyy/mm/dd。

PS:最近在开始做移动端开发,后面应该会遇到了不少兼容性问题,不断总结,希望以后少踩坑!