就是有两个时间,然后计算出两个时间的差是多少个月,因为每个月天数并不是一直相同的,还有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') 返回 '1月1日' getMiddleDate('2021-02-28','2022-02-28') 返回 '1年0月1日' 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')都返回 '1年1月',这是租房系统特殊要求的。
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+"日":"") }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报