繁体   English   中英

如何在JavaScript中的两个日期之间获取整月

[英]How to get full months between two dates in javascript

嗨,如何在javascript中获取两个日期之间的完整月份? 我设法获得了整天,年-月-日和周-日,但是我如何获得整整12个月的月? 例如13个月5天或25个月1天。 我只需要月份部分,这是一个ID为fmonths的段落。 有时可能由于leap年或其他原因而缩短了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> 

您可以使用如下形式:

 function monthDiff(d1, d2) { var months; months = (d2.getFullYear() - d1.getFullYear()) * 12; months -= d1.getMonth() + 1; months += d2.getMonth(); return months <= 0 ? 0 : months; } var result = monthDiff( new Date(2008, 10, 4), new Date(2010, 2, 12) ); document.getElementById("result").innerHTML = result 
 <span id="result"></span> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM