我需要找到一种方法来计算使用JavaScript的贷款的最终到期日期,但需要在不到31天或30天的时间内计算月数。
例如,如果我的期限为60个月(5年)且我的start_date为2015年1月31日,则我的最终截止日期为12/31/2019。现在,如果我的任期是62个月,我的最后截止日期是02/28/2020。大多数JavaScript数学的问题是我得到了03/03/2020的结果,这是不正确的。有什么想法吗?
答案 0 :(得分:0)
这没有经过充分测试,但它可能会做你想要的。它涉及重做Date API自动执行的一些计算,但它们并不太难:
var addMonths = (function() {
var counts = {
normal: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
leap: [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
};
return function(startDate, months) {
var endYear = startDate.getFullYear() + Math.ceil((months + startDate.getMonth()) / 12) - 1;
var yearType = ((endYear % 4 == 0) && (endYear % 100 != 0)) || (endYear % 400 == 0) ? 'leap' : 'normal';
var endMonth = (startDate.getMonth() + months) % 12;
var endDate = Math.min(startDate.getDate(), counts[yearType][endMonth]);
return new Date(endYear, endMonth, endDate);
};
}());
var date = new Date(2015, 0, 31); // 2015-01-31
addMonths(date, 60); //=> 2020-01-31
addMonths(date, 61); //=> 2020-02-29
addMonths(date, 62); //=> 2020-03-31
addMonths(date, 63); //=> 2020-04-30
addMonths(date, 73); //=> 2021-02-28
请注意,我的电话号码似乎与您的号码相隔一个月。我猜你在使用第一笔付款作为开始日期,并没有实际添加完整的补充,比如62个月。但显然如果你愿意的话,这很容易通过一个调整。
答案 1 :(得分:0)
添加您想要的年数和月数,然后找到该月的最后一天。 Javascript日期添加将为您提供您找到的结果,因此需要几个额外的步骤:
function addMonths(month, year, term) {
var endTerm = term - 1; // adjust for zero index
var newYear = year + parseInt(endTerm / 12); // add the years
var newMonth = month + (endTerm % 12); // add the remaining months
if (newMonth > 12) { // remaining months into next year?
newYear = newYear + 1;
newMonth = newMonth - 12;
}
var endDate = new Date(newYear, newMonth, 0); // get last day of month
return endDate;
}
此解决方案符合您设置的参数。您需要检查角落情况。例如,1个月的期限给出当月的结束日期,2个月的期限给出下个月的结束日期。
对于您的具体问题,这是一个非常简单的解决方案。如果您要进行一系列日期操作,请考虑使用库。
这是一个真正的快速jsFiddle:https://jsfiddle.net/8gnb0s0s/3/