陌丿尘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 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!