var range = getDates(new Date(), new Date().addDays(7));
我希望“range”成为一个日期对象的数组,其中包括两个日期之间每一天的日期。关键是它还应该处理月份和年份的边界。var range = getDates(new Date(), new Date().addDays(7));
我希望“range”成为一个日期对象的数组,其中包括两个日期之间每一天的日期。关键是它还应该处理月份和年份的边界。getDates = (from, to) => {
const cFrom = new Date(from);
const cTo = new Date(to);
let daysArr = [new Date(cFrom)];
let tempDate = cFrom;
while (tempDate < cTo) {
tempDate.setUTCDate(tempDate.getUTCDate() + 1);
daysArr.push(new Date(tempDate));
}
return daysArr;
}
你可以将第三个参数作为间隔使用。
function arrayDateRange(start, stop, step) {
if (step < 1000) return [start, stop];
return Array.from({ length: (stop - start) / step + 1 }, (value, index) => {
return new Date(start.getTime() + index * step)
});
}
arrayDateRange(new Date('2023-01-01'),new Date('2023-01-15'),(1000*60*60*24))
这个变量解决了这里大部分答案中的一个问题:当结束日期时间在开始日期时间之前时,最后一个日期将不会包括在结果数组中。
function getDatesInRange(startDate, endDate) {
const start = new Date(startDate);
const dates = [];
while (start.toISOString().slice(0, 10) <= endDate.toISOString().slice(0, 10)) {
dates.push(new Date(start));
start.setDate(start.getDate() + 1);
}
return dates;
}
通过比较两个日期的部分ISO字符串表示,我们确保只计算天数。
eachDayOfInterval
[1]和addDays
[2]来返回开始日期和结束日期之间的日期数组。 - tinystone