我们假设开始日期为2019-01-10
。我们必须提前15个月检查。
因此结束日期为2020-04-10
。
我想获得上面列表中每个月的每10天的列表。
喜欢以下内容:
['2019-01-10','2019-02-10','2019-03-10','2019-04-10',......, '2020-04-10']
js,如何立即执行此操作? 如果在moment.js中无法做到这一点,那么我们可以使用JavaScript进行哪些操作?
答案 0 :(得分:2)
在普通JavaScript中,只需使用Date.setMonth
。对于开始日期(例如29、30和31),结果日期将延续到下个月,因此您必须处理这种情况。
function buildDates(startDate, months) {
return Array.from({
length: months
}, function(_, i) {
var date = new Date(startDate.getTime());
var mnth = date.getMonth();
date.setMonth(mnth + i);
if (date.getMonth() !== (mnth + i) % 12) {
date.setDate(0);
}
return date;
});
}
console.log(buildDates(new Date(2019, 0, 10), 15));
console.log(buildDates(new Date(2019, 0, 31), 15));
答案 1 :(得分:1)
您可以通过add方法将日期移动n
个月。像这样:
function dateOffsetByMonths(months, dateStr, format) {
var startDate = moment(dateStr, format);
return Array.from(Array(months + 1).keys()).reduce(function(res, n, i) {
var date = startDate.clone();
date.add(i, 'months');
res.push(date.format('YYYY-MM-DD'));
return res;
}, []);
}
console.log(dateOffsetByMonths(15, '2019-01-10', 'YYYY-MM-DD'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.min.js"></script>
答案 2 :(得分:1)
您可以使用array#from
来累积数组中的所有日期。在每次迭代中都将索引添加到初始日期。
function allDates(length, date, format) {
return Array.from({length}, (_, i) => moment(date, format).add(i, 'months').format(format));
}
console.log(allDates(15, '2019-01-31', 'YYYY-MM-DD'));
console.log(allDates(15, '2019-01-10', 'YYYY-MM-DD'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.min.js"></script>