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)'
  }
]