我需要找到一种方法来计算贷款的最终到期日期,使用JavaScript计算的月份少于31天或30天,并且每半月运营一次。
例如,如果我的半月期限为12(6个月)且我的start_date为2015年1月31日,则我的最终截止日期应为2016年6月15日。有什么想法吗?
以下是我每月的情况:
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("contractDate");
var year = date.getFullYear();
var month = date.getMonth();
var day = date.getDate();
var newDate = new Date(year, month, day);
var result = addMonths(newDate, term-1);
答案 0 :(得分:0)
假设您发布的所有内容都是正确的06/15/2016与2015年1月31日的6个月不符。
正确日期应为:2015年7月31日(星期五)(2015年7月31日)
以下是关于如何从javascript中获取当前日期6个月的示例。
function getDaysInMonth(month, year) {
return new Date(year, month, 0).getDate();
}
var dateStarted = new Date(Date.parse("01/31/2015"))
var dateEnded = dateStarted.getTime();
var termMonths = 6 // Pure Month Count
for(var monthCount = dateStarted.getMonth() + 1; monthCount < dateStarted.getMonth() + (termMonths + 1); monthCount++) {
dateEnded += (24*3600000) * getDaysInMonth(monthCount, dateStarted.getFullYear());
}
console.log(new Date(dateEnded))
这里最重要的是:
dateEnded += (24*3600000) * getDaysInMonth(monthCount, dateStarted.getFullYear());
所以dateStarted将时间转换为毫秒(unix时间戳)。
dateEnded将在开始日期后的每个月内以毫秒数更新。
由于一小时内有3600000毫秒,因此您需要将其乘以24以获得一天中的毫秒数。然后,您需要将该数字乘以该月的天数。
将所有月份添加到一起后,您需要将该值转换为可用格式:
console.log(new Date(dateEnded))