2015-07-02 53 views
0

我需要找到一種方法來計算使用JavaScript的貸款的最終到期日期,該月份的帳齡月數少於31天或30天,並且每半月運行一次。例如,如果我的半月期限爲12(6個月),且我的start_date是2015年1月31日,則我的最終到期日期應爲2016年6月15日。有任何想法嗎?Javascript中的半月到期日計算

這裏是我每月:

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

我添加了我每月使用的代碼。 –

+0

嗨@JosephMarikle。我正在嘗試2015年9月1日的'contractDate'和53的'term',但是使用上面的公式得到了錯誤的結果。它顯示1/1/2020,而不是1/1/2020。任何想法如何發生? –

回答

0

假設您發佈的一切是正確的2016年6月15日並沒有從2015年1月31日匹配的6個月。

正確的日期應該是:星期五,2015年(2015年7月31日)

繼承人如何從JavaScript中的當前日期在6個月的例子7月31日。

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

感謝您的回覆。但這裏的問題是,我正在嘗試每半個月解決一次。例如,如果我有兩個半月的期限,並且您的第一個到期日期爲2015年1月1日,那麼您的最終到期日期爲2015年1月15日。我試過上面的例子,但它似乎沒有正確解決這個問題。 :\ –

+0

使用我給的基地。然後,而不是3600000使用1800000.你仍然需要循環通過每個月,而不是增加整個月,你只需要添加一半。 – Bioto

+0

謝謝。我修改了,但這裏是我得到的結果: –