创建两个日期之间的日期数组

时间:2018-10-17 20:59:59

标签: javascript

我有2个日期:开始日期和结束日期。结束日期总是比开始日期短一天。因此,如果我的开始日期是19日,则结束日期将在下个月的18日。

我正在尝试创建两个日期之间的天数数组。 (计算每个月的差异从19日到18日,然后从18日到18日)

Example

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

2 个答案:

答案 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'));