zoukankan      html  css  js  c++  java
  • 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')
    
  • 相关阅读:
    【BZOJ3110】K大数查询(权值线段树套线段树+标记永久化,整体二分)
    【BZOJ3669】魔法森林(LCT)
    art-template前端高性能模板
    spring新心得
    工作流程
    idea操作
    log4j学习
    对实体 "useSSL" 的引用必须以 ';' 分隔符结尾。
    JUnit4学习
    maven搭建
  • 原文地址:https://www.cnblogs.com/sanhuamao/p/14389866.html
Copyright © 2011-2022 走看看