Javascript中的半月到期日计算

Semi-Monthly Maturity Date Calculation in Javascript

本文关键字:半月 到期日 计算 Javascript      更新时间:2023-09-26

我需要找到一种方法,使用JavaScript计算贷款的最终到期日,该方法计算的月数少于31或30天,并且每半月运行一次。

例如,如果我的半个月期限为12(6个月(,并且我的开始日期为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);

假设您在2016年6月15日发布的所有内容都是正确的,则与2015年1月31日起的6个月不匹配。

正确的日期应为: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))