使用矩的天数数组
Array with number of days using moment
我正在尝试创建一个数组,其中包含两个日期之间的天数。
日期可以是任何日期,但我在此示例中使用以下日期。
Start : 11/30/2018, End: 09/30/2019
Array= [30,31,29,30....31]
我想做什么:
这里的日期范围从 30 to 30
到 30-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 日,然后从那里开始日期范围。
我该如何解决这个问题?
您可以遍历 startDate
和 endDate
之间的日期,并使用 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>
我会直接比较日期,而不是按月中的天数。如果开始和结束日期不同
,还添加了检查以确保您正确捕获结束日期
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>
我正在尝试创建一个数组,其中包含两个日期之间的天数。
日期可以是任何日期,但我在此示例中使用以下日期。
Start : 11/30/2018, End: 09/30/2019
Array= [30,31,29,30....31]
我想做什么:
这里的日期范围从 30 to 30
到 30-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 日,然后从那里开始日期范围。
我该如何解决这个问题?
您可以遍历 startDate
和 endDate
之间的日期,并使用 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>
我会直接比较日期,而不是按月中的天数。如果开始和结束日期不同
,还添加了检查以确保您正确捕获结束日期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>