我正在尝试创建一个数组,其中包含两个日期之间的天数。
日期可以是任何日期,但我将使用以下内容:
Start : 11/30/2018, End: 09/30/2019
Array= [30,31,29,30....31]
我要实现的目标:
我尝试过的事情:
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>
除array年外,日期数组的范围从前几列的30-30
到最后几列的30-29
。
第一种情况有效。对于第二种情况,如何使日期范围为30-29?我尝试了.subtract(1,'days'),但它没有返回正确的结果,因为我也希望日期范围也能正常工作,而不是每次都减去一天。
感谢您的帮助。谢谢。
答案 0 :(得分:0)
仅供参考,那一刻有一个关于范围的官方插件(it is in their documentation),有了它,您的解决方案就会在以下几行中崭露头角:
const Moment = require('moment');
const MomentRange = require('moment-range');
const moment = MomentRange.extendMoment(Moment);
const range = moment.range(moment(new Date("11/30/2018")), moment(new Date("09/30/2019")));
console.log(Array.from(range.by('day')).map(x => +x.format('DD')))
您可以通过最近的x.format('')
等来更改想要获取日期的格式
您可以看到它working here
答案 1 :(得分: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));
while (mstart.format('MM-DD-YYYY') != mend.format('MM-DD-YYYY')) {
dates.push(mstart.format('DD'));
mstart.add(1, 'day');
}
console.log(dates);
您可以在此处进行检查:https://jsbin.com/lufupihabe/edit?html,js,console
答案 2 :(得分: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 nextEnd
let i = 0;
while (1 == 1) {
let nextStart = nextEnd? (nextEnd.date() > 28 ? nextEnd.add(1, 'days') : nextEnd) : nextEnd || mstart.clone().add(i, 'M');
nextEnd = mstart.clone().add(i + 1, 'M') > mend ? mend : mstart.clone().add(i +1, 'M');
if(nextEnd.date() > 28){
nextEnd.subtract(1, 'days')
}else{
}
console.log("start-->", nextStart.format('MM/DD/YYYY'), "end--", nextEnd.format('MM/DD/YYYY'))
if (nextEnd >= mend) {
break;
}else{
dates.push(nextEnd.diff(nextStart, 'days'));
}
i += 1
}
console.log(dates)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
答案 3 :(得分:0)
以下代码对我有用:
while (1 == 1) {
let nextStart = mstart.clone().add(i, 'M');
let nextEnd = mstart.clone().add(i + 1, 'M').subtract(1,'days') > mend ? mend : mstart.clone().add(i + 1, 'M').subtract(1,'days') ;