0

我正在尝试创建一个数组,其中包含两个日期之间的天数。

日期可以是任何日期,但我在此示例中使用以下日期。

Start : 11/30/2018, End: 09/30/2019
Array= [30,31,29,30....31]

我正在尝试做的事情:

在此处输入图像描述

这里的日期范围从30 to 3030-29.

我有以下代码:

const start = "11/30/2018";
const end = "09/30/2019";

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 : -1);
                      //mstart.daysInMonth() + (i === 0 ? -1 : 0) for the first case.

    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>

问题:

日期范围适用于其他日期,只要它不是接近月底。

我需要从开始日期到结束日期的日期范围。在这里,它计算从 30 到 29 的日期,但是一旦到 2 月,它就需要该月的 28 日,然后从那里开始日期范围。

我该如何解决?

4

2 回答 2

0

您可以遍历 and 之间的天数startDateendDate并使用它moment来取第二天,然后用moment(date).date()提取月份中的哪一天...
这样做直到你到达最后。

更新:添加片段:

// Returns all month days.
function getDays(start, end) {
    const days = [];
    start = moment(new Date(start));
    end = moment(new Date(end));
    while (start <= end) {
        days.push(moment(start).date())
        start = moment(start).add(1, 'days');
    }
    return days;
}

// Returns the number of month days.
function getMonthDays(start, end) {
    const days = [];
    start = moment(new Date(start));
    end = moment(new Date(end));
    while (start <= end) {
        days.push(moment(start).daysInMonth())
        start = moment(start).add(1, 'M');
    }
    return days;
}
    
// console.log(getDays("11/30/2018", "09/30/2019"));
console.log(getMonthDays("11/30/2018", "09/30/2019"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

于 2018-11-30T20:29:41.383 回答
0

我会直接比较日期,而不是每月的天数。还添加了检查以确保您正确捕获结束日期,如果它不是同一天的开始和结束

const start = "11/30/2018";
const end = "09/30/2019";

const dates = [];

const mstart = moment(new Date(start));
const mend = moment(new Date(end));

let i = 0;
while (1 == 1) {
  let nextStart = mstart.clone().add(i, 'M');
  let nextEnd = mstart.clone().add(i + 1, 'M') > mend ? mend : mstart.clone().add(i + 1, 'M');

  dates.push(nextEnd.diff(nextStart, 'days'));

  if (nextEnd >= mend) {
    break;
  }

  i += 1
}


console.log(dates);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

于 2018-11-30T20:41:43.323 回答