ios移动端 |关于时间对象的兼容问题

整理一下安卓系统能正常运行,而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')
上一篇:D1-Markdown语法代码


下一篇:独立按键控制LED移位