考虑2个日期,格式为MM/DD/YYYY
第1天=今天第2天=从今天起45天
注:此处,第一个日期和第二个日期是可变的。即,今天的第一个日期可以是明天或任何其他日期。第二个日期可以是15天、24天、105天,即,此“n”也可以变化。
假设上述两个日期为startDate和stopDate。我想创建一个给定间隔的datePairs数组。
例如,如果startDate = 12/01/2022 & stopDate = 12/20/2022,我希望datePairs之间的间隔为2(n = 2)天。因此,输出数组应如下所示
[
['12/01/2022', '12/03/2022'],
['12/04/2022', '12/06/2022'],
['12/07/2022', '12/09/2022'],
['12/10/2022', '12/12/2022'],
['12/13/2022', '12/15/2022'],
['12/16/2022', '12/18/2022'],
['12/19/2022', '12/20/2022']
]
注意:这里,最后一个数组没有2个日期差距,因为它离stopDate只有1天。在这种情况下,最后一对之间的间隔可以更小。
唯一的条件是上面的数组长度应该总是偶数。
Date.prototype.addDays = function (days) {
var dat = new Date(this.valueOf());
dat.setDate(dat.getDate() + days);
return dat;
};
function splitInto(array, size, inplace) {
var output, i, group;
if (inplace) {
output = array;
for (i = 0; i < array.length; i++) {
group = array.splice(i, size);
output.splice(i, 0, group);
}
} else {
output = [];
for (i = 0; i < array.length; i += size) {
output.push(array.slice(i, size + i));
}
}
return output;
}
function getDates(startDate, stopDate) {
var dateArray = new Array();
var currentDate = startDate;
var i = 0;
while (currentDate <= stopDate) {
if (i % 2 == 1) {
const options = {
year: 'numeric'
};
options.month = options.day = '2-digit';
var formattedCSTDate = new Intl.DateTimeFormat([], options).format(currentDate);
dateArray.push(formattedCSTDate);
currentDate = currentDate.addDays(1);
} else {
const options = {
year: 'numeric'
};
options.month = options.day = '2-digit';
var formattedCSTDate = new Intl.DateTimeFormat([], options).format(currentDate);
dateArray.push(formattedCSTDate);
currentDate = currentDate.addDays(3);
}
i = i + 1;
}
return dateArray;
};
var dateArray = getDates(new Date(), (new Date()).addDays(43));
var datePairLength = 2;
var rangeArray = splitInto(dateArray, datePairLength, false);
console.log(rangeArray);
1条答案
按热度按时间ndh0cuux1#
在我看来,你把它弄得比实际需要的还要复杂。只要把每个范围构建成一个数组,避免使用 splitInto 函数。你可以使用一个日期库(有很多可供选择)来添加日期和设置格式: