我在将时间范围划分为周数组的函数方面遇到问题。例如,在运行一个时间范围:10-08-2020
和10-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;
}