Javascript

时间:2015-07-02 16:36:55

标签: javascript date

我需要找到一种方法来计算贷款的最终到期日期,使用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);

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))