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

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

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

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+"日":"")
}

https://blog.csdn.net/weixin_44058725/article/details/126759726?spm=1001.2014.3001.5502
这个 不知道 能不能帮到你 。使用moment.js实现

可以用XEUtils方法库,里面有很多对于日期操作的方法
getDateDiff (startDate, endDate [, rules]) 返回两个日期之间差距,如果结束日期小于开始日期 done 为 fasle

XEUtils.getDateDiff('2017-11-20', '2017-12-21')
                  // { done: true, time: 2678400000, yyyy: 0, MM: 1, dd: 1, HH: 0, mm: 0, ss: 0, S: 0 }
                XEUtils.getDateDiff('2017-12-20', '2017-12-21')
                // { done: true, time: 86400000, yyyy: 0, MM: 0, dd: 1, HH: 0, mm: 0, ss: 0, S: 0 }
                XEUtils.getDateDiff('2018-01-01', '2017-12-21')
                // { done: false, time: 0 }
                let dateDiff = XEUtils.getDateDiff('2017-12-20 10:10:30', '2017-12-21 10:15:00')
                let content = `${dateDiff.mm}分${dateDiff.ss}秒`
                // '4分30秒'