我有2个日期:开始日期和结束日期。结束日期总是比开始日期短一天。因此,如果我的开始日期是19日,则结束日期将在下个月的18日。
我正在尝试创建两个日期之间的天数数组。 (计算每个月的差异从19日到18日,然后从18日到18日)
8/19/2018-9/18/2018 = 30天
9/18/2018-10/18/2019 = 30天
10/18/2018-11/18/2018 = 31天
数组= [30,30,31]
我正在使用以下代码计算日期之间的天差。
function daysBetweenArrears (date1, date2){
date1.setDate(date1.getDate() );
date2.setDate(date2.getDate() - 1);
var Diff = Math.abs(date2.getTime() - date1.getTime());
var TimeDifference = Math.round(Diff / (1000 * 3600 * 24));
return TimeDifference;
}
以下用于创建数组的代码
if (document.getElementById("endDate"))
y = document.getElementById("endDate").value;
if (document.getElementById("startDate"))
z = document.getElementById("startDate").value;
var dateArr = getDateArray(z, y);
var dayCountArr = "";
var b = [];
for (var x = 0; x < dateArr.length-1; x++)
{
dayCountArr += daysBetweenArrears(dateArr[x], dateArr[x+1], ",");
b.push(daysBetweenArrears(dateArr[x], dateArr[x+1]));
}
问题在于,当我将日期设置如下时,它给了我错误的输出。问题在于,每当到下个月时,日期设置都不正确。我不确定在这里我在做什么错。任何帮助是极大的赞赏。谢谢。
date2.setDate(date2.getDate() - 1);
答案 0 :(得分:1)
您可以使用矩来完成此操作。希望这会有所帮助。
const start = "8/19/2018";
const end = "11/18/2018 ";
const dates = [];
const mstart = moment(new Date(start));
const mend = moment(new Date(end));
for (let i = 0; mstart < mend ; i++) {
const daysInMonth = mstart.daysInMonth() + (i === 0 ? -1 : 0);
dates.push(daysInMonth);
mstart.add(1, 'M');
}
console.log(dates);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
答案 1 :(得分:0)
您可以更新功能daysBetweenArrears
const daysBetweenArrears = (date1, date2) => {
const time1 = new Date(date1).getTime();
const time2 = new Date(date2).getTime();
const diff = Math.abs(time2 - time1);
return Math.round(diff/(1000*60*60*24));
};
console.log(daysBetweenArrears('8/18/2018', '9/18/2018'));
console.log(daysBetweenArrears('6/18/2018', '7/18/2018'));