Javascript 将时间范围拆分为周数组时返回错误日期
我对将时间范围分割为周数组的函数有问题。例如,运行后的时间范围:Javascript 将时间范围拆分为周数组时返回错误日期,javascript,typescript,Javascript,Typescript,我对将时间范围分割为周数组的函数有问题。例如,运行后的时间范围: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
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;
}
异步getArrayOfWeeks(开始:字符串,结束:字符串){
常数周=[];
让当前=新日期(开始);
const end=新日期(end);
const increaseDays=(日期:日期,金额:数字)=>新日期(date.setDate(date.getDate()+金额));
while(当前<结束){
const beginOfWeek=新日期(当前);
让endOfWeek=增加天数(当前为6天);
endOfWeek=endOfWeek>end?end:endOfWeek;
周。推({
“周”:开始工作周+“”+结束工作周;
});
当前=增加天数(当前,1);
}
返回周;
}
谢谢你的帮助:)我相信
endOfWeek=endOfWeek>start?结束:周末结束
可能应该检查结束
,而不是开始
,因为您生成的每个日期只会在开始
中添加越来越多的内容,您需要检查这一行中是否已经过了结束
endOfWeek = endOfWeek > start ? end : endOfWeek;
你正在检查周末是否结束,你应该检查的是它是否结束了,所以如果是,那么就说,好的,周末是在结束日期,因为上面给出的日期已经过去了(如果结束日期是10月10日,则排除了10月13日的可能性)
现在还有一个名为“setDate”的日期函数,它完成了您对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”格式。若你们想使用你们的格式,我建议你们使用这个库,它非常适合处理日期及其格式
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;
}
函数hello(){
让我们从‘2020-08-10’开始
让结束='2020-09-10'
常数周=[];
让当前=新日期(开始);
console.log(当前)
结束=新日期(结束);
while(当前<结束){
const beginOfWeek=新日期(当前);
让endOfWeek=current.setDate(beginOfWeek.getDate()+6);
endOfWeek=endOfWeek>end?end:endOfWeek;
周。推({
“周”:开始工作周+“”+结束工作周
});
current.setDate(current.getDate()+7);
}
控制台日志(周)
返回周;
}
这是上面代码的固定版本。然而,这并不能解释一周中正确的开始日期,但因为这不是问题所在,所以我将保持原样
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'));
您不应该重新初始化
end
——它既是参数又是常量。另外,我假设第4行的dto.to
应该是end
。@CharlieG,是的,我在主帖中更正了
[
{
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)'
}
]