字符串转为日期的浏览器兼容方案

in js with 1 comment views: 227 times

问题

日期的书写方式通常为两种

如何把字符串形转换为日期呢?

var str ="2018-04-29 16:09:19";
var date = new Date(str);

上面的代码确实能够将字符串转为日期,但是是否能够兼容所有浏览器呢??

测试

Chrome 浏览器

let str1 = "2018-04-29 16:09:19";
let str2 = "2018/04/29 16:09:19";
let date1 = new Date(str1);
let date2 = new Date(str2);
console.log('date1-->>',date1)
console.log('date2-->>',date2)

QQ20180429-161601.png

基本的表示方式谷歌浏览器都是可以支持的

下面测试一些非常规的字符串

let arr = ["2018=04=29 16:09:19","2018!04!29 16:09:19","2018@04@29 16:09:19","2018#04#29 16:09:19","2018$04$29 16:09:19","2018%04%29 16:09:19","2018^04^29 16:09:19"]
arr.map(v=>{
    console.log(v,new Date(v))
})

QQ20180429-162237.png

只测试了一部分的符号,通过图片可以看到,绝大部分的字符串都是可以正确解析成日期的,但是还是不建议使用这些符号来表示

Safari 浏览器

QQ20180429-162539.png

Safari 浏览器只支持 2018/04/29 16:09:19 这一种字符串书写方式转换为日期

Firefox 浏览器

QQ20180429-162636.png

火狐支持两种常规的书写方式,但是其他的一些书写方式全部不支持。

总结

如何让浏览器兼容我们最常规的2中书写方式呢??(主要是兼容safari浏览器)

var s = "2018-04-29 16:09:19";
s = s.replace(/-/g,"/");
var date = new Date(s);

QQ20180429-163114.png

为了让浏览器兼容,我们只能使用正则表达式对字符串进行替换操作,把字符串转为Safari浏览器兼容的样子。

Responses
  1. 城租

    Reply