整理一下安卓系统能正常运行,而ios显示异常的一些代码
问题1-new Date
通过new Date()
创建时间对象时,下面的写法会引起弹框报错,错误为“Number is Wrong”:
let day=new Date(2021,02,08)
正确写法应该把前面的0去掉:
let day=new Date(2021,2,8)
会出现这种弹框报错的情况还有很多,比如用momenjs创建一个时间对象:
moment('2021-1-1')
也会报错,正确格式应该为moment('2021-01-01')
。总之,应该严格区分并按照标准格式来写
问题2-momentjs方法
无法解析插件momentjs的某些方法如:isSame()
和isBefore()
。虽然写了它不会报错,但也没有任何反应,比如:
moment().isSame(moment("2020-1-1"), 'month')
所以我封装了一个比较年月日的方法
//@params {String} date1 第一个日期
//@params {String} date2 第二个日期
//@params {String} type 比较类别:before|前者早于后者 same|前者与后者一致 after|前者晚于后者
//@params {String} detail 比较精度:day|精确于日(默认) month|精确于月 year|精确于年
function compareDate(date1,date2,type,detail="day"){
let D1=date1.split('-').map(item=>Number(item))
let D2=date2.split('-').map(item=>Number(item))
//前者早于后者
if(type=='before'){
//精确于年
if(detail=="year"&&D1[0]<D2[0]){return true}
//精确于月
if(detail=="month"){
if(D1[0]<D2[0]){return true}
if(D1[1]<D2[1]){return true}
}
//精确于日
if(detail=="day"){
if(D1[0]<D2[0]){return true}
if(D1[1]<D2[1]){return true}
if(D1[2]<D2[2]){return true}
}
return false
}
//前者等于后者
if(type=='same'){
//精确于年
if(detail=="year"&&D1[0]==D2[0]){return true}
//精确于月
if(detail=="month"&&D1[0]==D2[0]&&D1[1]==D2[1]){return true}
//精确于日
if(detail=="day"&&D1[0]==D2[0]&&D1[1]==D2[1]&&D1[2]==D2[2]){return true}
return false
}
//前者晚于后者
if(type=='after'){
//精确于年
if(detail=="year"&&D1[0]>D2[0]){return true}
//精确于月
if(detail=="month"){
if(D1[0]>D2[0]){return true}
if(D1[1]>D2[1]){return true}
}
//精确于日
if(detail=="day"){
if(D1[0]>D2[0]){return true}
if(D1[1]>D2[1]){return true}
if(D1[2]>D2[2]){return true}
}
return false
}
}
这时候就能在ios正常比较了:
//示例1
let d1='2020-1-1'
let d2='2020-2-1'
compareDate(d1,d2,'before','month')
//示例2
compareDate('2021-1-1','2023-3-3','after')
compareDate('2021-01-01','2023-03-03','after')