陌丿尘16 2022-11-17 11:35 采纳率: 90.2%
浏览 11
已结题

前端vue有没有什么办法能计算出两个时间之差的自然月

就是有两个时间,然后计算出两个时间的差是多少个月,因为每个月天数并不是一直相同的,还有2月份这个特殊月份,所以没办法有规律的去计算,请问前端vue有没有什么方法能计算出来呢,比如2022-02-28到2022-03-28算一个月,到2022-03-29就算两个月了,然后2022-10-31到2022-11-30就算是一个月了,请问哪位有写过类似的能不能指点一下,万分感谢

  • 写回答

3条回答 默认 最新

  • 小孟js 2022-11-17 13:27
    关注

    这是我项目里用到的算租期的,你多输入几个临界值看看符不符合你的要求,或者你自己改一下。下边是几个例子

    getMiddleDate('2021-02-28','2021-03-28') 返回 '11日'
    getMiddleDate('2021-02-28','2022-02-28') 返回 '101日'
    getMiddleDate('2021-02-28','2022-02-27') 返回 '1年'
    getMiddleDate('2021-01-31','2022-02-28')和getMiddleDate('2021-01-30','2022-02-28')还有getMiddleDate('2021-01-29','2022-02-28')都返回 '11月',这是租房系统特殊要求的。
    
    
    function getMiddleDate(start,end){
        const startArr = start.split(" ")[0].split("-")
        const endArr = end.split(" ")[0].split("-")
        let year = endArr[0] - startArr[0]
        let month
        if( endArr[1] < startArr[1]){
            month = 12 - Number(startArr[1]) + Number(endArr[1]) - 1
            year-=1
        }else{
            month =endArr[1] - startArr[1]
        }
        console.log(month)
        let mDay = new Date(startArr[0],startArr[1],0).toLocaleString().split(" ")[0].split("/")[2]
        let day = mDay - Number(startArr[2] - 1) + Number(endArr[2])
        console.log(day,mDay)
        if(day >= mDay){
            day = day - mDay
            if(month == 12){
                month = 1
                year+=1
            } else{month+=1}
        }
        if(startArr[1] <= endArr[1])month -= 1
        if(day == 31) {day = 0;month+=1}
        if(new Date(endArr[0],endArr[1],0).toLocaleString().split(" ")[0].split("/")[2] == 30 && day == 30){
            day = 0
            month += 1
        }
        if((endArr[0]%4==0&&endArr[0]%100!=0)||(endArr[0]%400==0)){
            if(endArr[1] == '02'&&day>=29){
                day = 0
                month += 1
            }
        }else{
            if(endArr[1] == '02'&&day>=28){
                day = 0
                month += 1
            }
        }
        if(month == 12){
            month = 0
            year+=1
        }
        return (year>0?year+"年":"")+(month>0?month+"月":day>0&&year>0?"0月":"")+(day>0?day+"日":"")
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月1日
  • 已采纳回答 11月23日
  • 创建了问题 11月17日

悬赏问题

  • ¥15 求指导ADS低噪放设计
  • ¥15 CARSIM前车变道设置
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存