js封装 |时间对象相关方法

获取某年某月天数

//@params {String|Number} year 年份
//@params {String|Number} month 月份
function getDays(year,month){
    let dayList=[31,'',31,30,31,30,31,31,30,31,30,31]
    let February=(year%4==0&&year%100!==0||year%400==0)?29:28
    dayList.splice(1,1,February)
    return dayList[month-1]
}

//示例
getDays(2020,2)

判断某日是周几

  • 种类一:传年,月,日
//@params {String|Number} year 年份
//@params {String|Number} month 月份
//@params {String|Number} day 日
//@params {String} type 形式 如"星期"(默认)或"周"
function getWeek(year,month,day,type="星期"){
    let week=new Date(year,month-1,day).getDay()//判断周几
    let chineseArr=['日','一','二','三','四','五','六']
    return type+chineseArr[week]
}

//示例
getWeek(2021,2,9)
  • 种类二:传字符串
//@params {String} date 日期 格式:"YYYY-MM-DD"
//@params {String} type 形式 如"星期"(默认)或"周"
function getWeek(date,type="星期"){
    date.split('-').map(item=>Number(item))
    let week=new Date(date[0],date[1]-1,date[2]).getDay()//判断周几
    let chineseArr=['日','一','二','三','四','五','六']
    return type+chineseArr[week]
}

//示例
getWeek('2021-2-9')
  • 种类三:获取当天
//@params {String} type 形式 如"星期"(默认)或"周"
function getWeek(type="星期"){
    let week=new Date().getDay()
    let chineseArr=['日','一','二','三','四','五','六']
    return type+chineseArr[week]
}

//示例
getWeek()

比较两者日期

//@params {String} date1 第一个日期 格式:"YYYY-MM-DD"
//@params {String} date2 第二个日期 格式:"YYYY-MM-DD"
//@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
      }else if(D1[0]==D2[0]&&D1[1]<D2[1]){
        return true
      }
    }
    //精确于日
    if(detail=="day"){
      if(D1[0]<D2[0]){
        return true
      }else if(D1[0]==D2[0]&&D1[1]<D2[1]){
        return true
      }else if(D1[0]==D2[0]&&D1[1]==D2[1]&&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
      }else if(D1[0]==D2[0]&&D1[1]>D2[1]){
        return true
      }
    }
    
    //精确于日
    if(detail=="day"){
      if(D1[0]>D2[0]){
        return true
      }else if(D1[0]==D2[0]&&D1[1]>D2[1]){
        return true
      }else if(D1[0]==D2[0]&&D1[1]==D2[1]&&D1[2]>D2[2]){
        return true
      }
    }
    return false
  } 
}

示例

compareDate('2021-01-01','2023-03-03','after')

判断日期范围

//@params {String} left 上界 格式:"YYYY-MM-DD"
//@params {String} date 需要比较的日期 格式:"YYYY-MM-DD"
//@params {String} right 下界 格式:"YYYY-MM-DD"
//@params {Boolean} isInclude 是否包括本身 true|包括(默认) false|不包括
//@params {String} type 比较类型 year|年 month|月 day|日(默认)
function between(left,date,right,isInclude=true,type='day'){
    left=left.split('-').map(item=>Number(item))
    right=right.split('-').map(item=>Number(item))
    date=date.split('-').map(item=>Number(item))
    
    if(isInclude){
        if(left[0]<=date[0]&&date[0]<=right[0]){
            if(type=='year'){return true}
            if(left[1]<=date[1]&&date[1]<=right[1]){
                if(type=='month'){return true}
                if(left[2]<=date[2]&&date[2]<=right[2]){
                    if(type=='day'){return true}
                }
            }
        }
        return false
    }else{
        if(type=='year'){
            return left[0]<date[0]&&date[0]<right[0]
        }
        if(type=='month'){
            //首先判断年份
            if(left[0]<=date[0]&&date[0]<=right[0]){
                return left[1]<date[1]&&date[1]<right[1]
            }
        }
        if(type=='day'){
            if(left[0]<=date[0]&&date[0]<=right[0]){
                if(left[1]<=date[1]&&date[1]<=right[1]){
                    return left[2]<date[2]&&date[2]<right[2]
                }
            }
        }
        return false
    }
}

示例:

between('2023-1-1','2023-2-2','2023-3-1',false,'month')
posted @ 2021-02-08 18:01  sanhuamao  阅读(97)  评论(0编辑  收藏  举报