ios端与安卓端的时间兼容问题
对于 2020-02-02 20:20:20 这种格式的时间
主要问题是:ios端不支持2020-02-02 20:20:20这种以-分割的时间格式。ios端仅支持2020/02/02 20:20:20这种以/分割的时间格式。而安卓端及pc端这两种格式的均支持。
解决办法:
1、判断如果是ios端则将时间格式转换成以/分割的形式。
如 let time='2020-02-02 20:20:20'.replace(/-/g,'/') //返回结果:"2020/02/02 20:20:20"
let preTime = new Date(time).getTime() //返回结果: 毫秒数:1580646020000
2、将时间格式转化成数组格式再去转换成毫秒数。
如 let time='2020-02-02 20:20:20'.split(/[- :]/) //返回结果:["2020", "02", "02", "20", "20", "20"]
let preTime = new Date(time[0],time[1]-1,time[2],time[3],time[4],time[5]).getTime() //返回结果: 毫秒数:1580646020000
解决格林尼治时间在ios端和android端的兼容问题
格林尼治时间格式:2019-03-05T09:02:24.000+0000
android端:
new Date("2019-03-05T09:02:24.000+0000") 可正常转换。
new Date("2019-03-05T09:02:24.000+0000".substr(0,19)) 转换出来的时间会早8个小时
ios端:
new Date("2019-03-05T09:02:24.000+0000") 输出为NaN,不可用。
new Date("2019-03-05T09:02:24.000+0000".substr(0,19)) 可正常转换
故通过判断是否是ios端,再选择转换方式。具体代码如下:
transDate(dateNum){
let u = navigator.userAgent;
if (!!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)) { //ios端
const date=new Date(dateNum.substr(0,19)) //截取前19位后再转换
let Y=date.getFullYear()
let M=date.getMonth()+1
M=M<10?('0'+M):M
let D=date.getDate()
D=D<10?('0'+D):D
let h=date.getHours()
h=h<10?('0'+h):h
let m=date.getMinutes()
m=m<10?('0'+m):m
let s=date.getSeconds()
s=s<10?('0'+s):s
return `${Y}-${M}-${D} ${h}:${m}:${s}`
}else{ //非ios端
const date=new Date(dateNum) //不截取,正常转换
let Y=date.getFullYear()
let M=date.getMonth()+1
M=M<10?('0'+M):M
let D=date.getDate()
D=D<10?('0'+D):D
let h=date.getHours()
h=h<10?('0'+h):h
let m=date.getMinutes()
m=m<10?('0'+m):m
let s=date.getSeconds()
s=s<10?('0'+s):s
return `${Y}-${M}-${D} ${h}:${m}:${s}`
}
},