我已经使用下面的函数进行了计算,它以“X YEARS,Y MONTHS,Z DAYS”的格式给出了 o/p,并且对于某些日期,它给出了一些错误的 o/p。我想我做了一些公式中缺少的计算。
功能是,
/**
* @param {Date} startdate
* @param {Date} enddate
* @return {String}
*/
function leasePeriodCalc(startDate,endDate)
{
var sdate=startDate;
var edate=endDate;
edate.setDate( edate.getDate()+1);
edate=new Date(edate);
if(sdate.valueOf()>edate.valueOf()){
return('0');
}
else{
var years=((((edate.getDate()-sdate.getDate())<0 ? -1:0)+((edate.getMonth()+1)-(sdate.getMonth()+1)))< 0 ? -1 : 0)+(edate.getFullYear()-sdate.getFullYear());
var months=((((edate.getDate()-sdate.getDate())<0 ? -1:0)+((edate.getMonth()+1)-(sdate.getMonth()+1)))< 0 ?12:0)+((edate.getDate()-sdate.getDate())<0 ? -1:0)+((edate.getMonth()+1)-(sdate.getMonth()+1));
if((edate.getMonth()-1)!=1.0)
{
var days=((edate.getDate()-sdate.getDate())< 0 ?new Date(edate.getFullYear(), edate.getMonth(),0).getDate():0)+(edate.getDate()-sdate.getDate());
}
else
{
var days=((edate.getDate()-sdate.getDate())< 0 ?new Date(edate.getFullYear(), edate.getMonth()+1,0).getDate():0)+(edate.getDate()-sdate.getDate());
}
var day;
var month;
var year;
if(years>1)year= years+ 'Years';
else year=years+'Year';
if(months>1) month= months+ 'Months';
else month=months+'Month';
if(days>1) day= days+ 'Days';
else day=days+'Day';
if(years==0&&months!=0&&days!=0) return(month+', '+day);
else if(years!=0&&months==0&&days!=0) return(year+', '+day);
else if(years!=0&&months!=0&&days==0) return(year+', '+month);
else if(years==0&&months==0&&days!=0) return(day);
else if(years==0&&months!=0&&days==0) return(month);
else if(years!=0&&months==0&&days==0) return(year);
else if(years==0&&months==0&&days==0) return(day);
else if(years!=0&&months!=0&&days!=0) return(year+', '+month+', '+day);
}
}
如果你给出如下的 i/p,它会返回错误的 o/p:
2013 年 2 月 28 日 - 2014 年 2 月 28 日
预期 o/p : 1 YEAR , 1 DAY
给定 o/p : 1 YEAR , 4 DAYS
但是,如果我选择 2013 年 2 月 28 日 - 2014 年 2 月 27 日的意思,它给出了正确的 o/p:
预期 o/p : 1 年
给定 o/p : 1 年
如果我做了任何事情,请建议纠正我的错误。
而且我必须告诉我,我并没有制定所有规则。一般来说,一个月是按照当月的天数计算的。
例如,如果我们从银行获得贷款,我们将仅每月支付利息,即使该月可能有 30 天或 29 天或 28 天或 31 天。
而且如果我们拿一个房间作为月租手段,我们就按月付房租吗?甚至可以是从 3 月 20 日到 4 月 19 日。即使它包含31天,据说也只有一个月。请帮我总结一下。
Tnx,CL。