就是有两个时间,然后计算出两个时间的差是多少个月,因为每个月天数并不是一直相同的,还有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+"日":"") }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
- ¥15 这种微信登录授权 谁可以做啊
- ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
- ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
- ¥15 网络设备配置与管理这个该怎么弄
- ¥20 机器学习能否像多层线性模型一样处理嵌套数据
- ¥20 西门子S7-Graph,S7-300,梯形图
- ¥50 用易语言http 访问不了网页
- ¥50 safari浏览器fetch提交数据后数据丢失问题
- ¥15 matlab不知道怎么改,求解答!!