现在有两个日期 需要计算这两个日期之间相差的月份 规则: 年-年 例如2022-2021 得出来是12个月
月-月 例如3-2 =1个月
日-日 例如 3日-2日=1日 那么这个一日也算一个月 向上取整
例子: "2022-03-03"和"2021-02-02" 之间 算出来的是12+1+1 =14
例子: "2022-03-02"和"2021-02-02" 之间 算出来的是12+1+0 =13
例子: "2022-03-01"和"2021-02-02" 之间 算出来的是12+1+0 =13
好了我看了一下moment的方法 但是算出来跟我的计算有点差别
var a3 = moment("2022-03-01");
var b3 = moment("2021-02-02");
console.log(a3.diff(b3, "months")); //
如果用moment的diff方法算出来的是
function monthNum(x,y){
var date=new Date(x)
var date1=new Date(y);
document.write((Math.round(((date-date1)/1000/60/60/24/365)*12))+(Math.round((date-date1)/1000/60/60/24/365/12))+"<br>")//(year2-year1)*12+(month2-month1);希望你能理解
}
monthNum("2021-09-08","2000-04-16")
首先你这个算法很奇怪。。。
如果是2022-03-04,另一个是2021-05-08怎么算?
2022-2021 = 1*12=12
03-05=-2,这个咋算?算0吗?
04-08=-4,这个也算0吗?
这样算出来能合理吗?本来相差10月不到,算出来确实12。。。
所以还是建议你直接给相差多少天或者把相差多少天转换成月份更合理些。代码如下
let a1="2022-03-03";
let a2='2021-02-02';
let days = (new Date(a1)-new Date(a2))/(60*60*24*1000);
let months = Math.ceil(394/30); //得到相差14个月,这里唯一的问题是,月份安30天算的,但是实际生活中有的是31天,或者28天29天(闰年)
还有一种办法,如下:这种计算可能更合理些
let a1="2022-03-03";
let a2='2021-02-02';
d1 = new Date(a1);
d2 = new Date(a2);
result = (d1.getFullYear()-d2.getFullYear())*12+(d1.getMonth()-d2.getMonth());
result += (d1.getDate()-d2.getDate())>0? 1:-1;