在将时间范围拆分为周数组时返回错误的日期



我在将时间范围划分为周数组的函数方面遇到问题。例如,在运行一个时间范围:10-08-202010-09-2020之后,我的最后一个日期是13-09-2020,而不是10-09-2020:/

有人能告诉我我的功能出了什么问题吗?

async getArrayOfWeeks(start: string, end: string) {
const weeks = [];
let current = new Date(start);
const end = new Date(end);
const increaseDays = (date: Date, amount: number) => new Date(date.setDate(date.getDate() + amount));
while(current < end) {
const beginOfWeek = new Date(current);
let endOfWeek = increaseDays(current, 6);
endOfWeek = endOfWeek > end ? end : endOfWeek;
weeks.push({
'week': beginOfWeek + " " + endOfWeek;
});
current = increaseDays(current, 1);
}
return weeks; 
}

感谢您的帮助:(

我认为endOfWeek = endOfWeek > start ? end : endOfWeek;可能应该对照end而不是start进行检查,因为您生成的每个日期只会向start添加越来越多的内容,并且您希望检查是否已超过end

这是上面代码的固定版本。然而,这并不能说明一周中正确的开始日期,但由于这不是问题所在,我将保持原样。

const getArrayOfWeeks = (start: string, end: string) => {
const weeks = [];
let current = new Date(start);
let endDate = new Date(end); //const end = new Date(dto.to);
while(current < endDate) {
const beginOfWeek = new Date(current);
let endOfWeek = new Date(current.setDate(current.getDate() + 6));  //let endOfWeek = increaseDays(current, 6);
endOfWeek = endOfWeek > endDate ? endDate : endOfWeek;  //endOfWeek = endOfWeek > start ? end : endOfWeek;
weeks.push({
'week': beginOfWeek + " " + endOfWeek  //'week': beginOfWeek + " " + endOfWeek;  notice the removed ";"
});
current = new Date(current.setDate(current.getDate() + 1)); //current = increaseDays(current, 1);
}
return weeks; 
}
console.log(getArrayOfWeeks('10-08-2020','10-09-2020'));

将返回

[
{
week: 'Thu Oct 08 2020 00:00:00 GMT+0200 (GMT+02:00) Fri Oct 09 2020 00:00:00 GMT+0200 (GMT+02:00)'
}
]

在此行中

endOfWeek = endOfWeek > start ? end : endOfWeek;

你正在检查endOfWeek是否已经开始,以及如果已经结束,你应该检查什么,所以如果是,那么就说,好吧,周末在结束日期,因为上面给出的已经过去了(如果结束日期是10月10日,就不可能得到10月13日(

现在还有一个名为"setDate"的Date函数,它可以像您使用increaseDays所做的那样,尽管它看起来更漂亮,但不使用内置函数是一种浪费。因此,取而代之的是:

const increaseDays = (date: Date, amount: number) => new Date(date.setDate(date.getDate() + amount));
let endOfWeek = increaseDays(current, 6);

你可以简单地做

let endOfWeek = current.setDate(current.getDate() + 6);

编辑:您的日期格式已禁用,默认情况下需要为ISO"YYYY-MM-DD"格式。如果你想使用你的格式,我推荐moment.js库,它非常适合处理日期及其格式

function hello() {
let start = '2020-08-10'
let end = '2020-09-10'
const weeks = [];
let current = new Date(start);
console.log(current)
end = new Date(end);
while(current < end) {
const beginOfWeek = new Date(current);
let endOfWeek = current.setDate(beginOfWeek.getDate() + 6);
endOfWeek = endOfWeek > end ? end : endOfWeek;
weeks.push({
'week': beginOfWeek + " " + endOfWeek
});
current.setDate(current.getDate() + 7);
}
console.log(weeks)
return weeks; 
}

最新更新