Здравейте, как мога да получа пълните месеци между две дати в javascript? Успях да получа пълните дни, години-месеци-дни и седмици-дни, но как да получа пълните месеци, които продължават след 12? Например 13 месеца и 5 дни или 25 месеца и 1 ден. Просто имам нужда от раздела за месеца, който е абзац с id fmonths. Понякога се забавя с 1 месец може би поради високосна година или нещо подобно. Правилни ли са и другите изчисления?
function calculate() {
var fromDate = document.getElementById('fromDate').value;
var toDate = document.getElementById('toDate').value;
try {
document.getElementById('result').innerHTML = '';
var result = getDateDifference(new Date(fromDate), new Date(toDate));
} catch (e) {
console.error(e);
}
}
function getDateDifference(startDate, endDate) {
if (startDate > endDate) {
console.error('Start date must be before end date');
return null;
}
var startYear = startDate.getFullYear();
var startMonth = startDate.getMonth();
var startDay = startDate.getDate();
var endYear = endDate.getFullYear();
var endMonth = endDate.getMonth();
var endDay = endDate.getDate();
var february = (endYear % 4 == 0 && endYear % 100 != 0) || endYear % 400 == 0 ? 29 : 28;
var daysOfMonth = [31, february, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
var startDateNotPassedInEndYear = (endMonth < startMonth) || endMonth == startMonth && endDay < startDay;
var years = endYear - startYear - (startDateNotPassedInEndYear ? 1 : 0);
var months = (12 + endMonth - startMonth - (endDay < startDay ? 1 : 0)) % 12;
var days = startDay <= endDay ? endDay - startDay : daysOfMonth[(12 + endMonth - 1) % 12] - startDay + endDay;
var diff = endDate - startDate;
var ms = 1000 * 60 * 60 * 24;
var fdays = Math.round(diff / ms);
var weeks = Math.floor(diff / ms / 7);
var wdays = diff / ms % 7;
var fmonths = Math.round(endYear - startYear) * 12 + (endMonth - startMonth);
var fmdays = startDay <= endDay ? endDay - startDay : daysOfMonth[(12 + endMonth - 1) % 12] - startDay + endDay;
document.getElementById('result').innerHTML = fdays + " days or ";
document.getElementById('ymd').innerHTML = years + " years, " + months + " months, " + days + " days or ";
document.getElementById('wd').innerHTML = weeks + " weeks and " + wdays + " days";
document.getElementById('fmonths').innerHTML = fmonths + " months, " + fmdays + " days ";
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.3.3/semantic.min.css">
<center>
<div class="ui right pointing label">
Start Date
</div>
<div class="ui huge input">
<input type="text" name="fromDate" id="fromDate" placeholder="yyyy-mm-dd" value="2016-1-1" /></div>
<div class="ui right pointing label">
End Date
</div>
<div class="ui huge input">
<input type="text" name="toDate" id="toDate" placeholder="yyyy-mm-dd" value="2017-1-1" />
</div>
<br>
<br>
<button class="ui primary button" input type="button" name="calculate" value="Calculate" onclick="javascript:calculate()">
Calculate
</button>
<p id="result"></p>
<p id="ymd"></p>
<p id="wd"></p>
<p id="fmonths"></p>