在 JavaScript 循环中使用 moment 从给定日期 3 个月前的日期开始每 7 天收集一次

Using moment in a JavaScript loop to collect every 7th day from a date 3 months back from a given date

给定一个 startdate(一年中的任何日期),我需要返回 3 个月的时间并每隔 7 个日期收集一次,直到并包括 开始日期。到目前为止,我有这个使用 momentjs

的循环
const date = new Date('2021-06-06T00:00:00.000Z');

for(var m = moment(date).subtract(3, 'months'); m.isSameOrBefore(date); m.add(7, 'days')) {
  console.log(m.format('YYYY-MM-DD'))
}

哪个returns:

2021-03-06
2021-03-13
2021-03-20
2021-03-27
2021-04-03
2021-04-10
2021-04-17
2021-04-24
2021-05-01
2021-05-08
2021-05-15
2021-05-22
2021-05-29
2021-06-05

问题是我希望循环在给定的 开始日期

结束

因此,如果在上面的示例中给出日期 2021-06-06,我希望我的最终结果是:

2021-03-07
2021-03-14
2021-03-21
2021-03-28
2021-04-04
2021-04-11
2021-04-18
2021-04-25
2021-05-02
2021-05-09
2021-05-16
2021-05-23
2021-05-30
2021-06-06

如何做到这一点?

如果是这样的话,我会改为从 startDate 开始。

所以,基本上 loop 从 2021-06-06 开始减去 7 天。
设置 threshhold 日期进行比较,在本例中为 moment(date).subtract(3, 'months')
currentDatethreshhold.

之前时中断循环
const date = new Date('2021-06-06T00:00:00.000Z');
function getDateList(currentDate){
    currentDate = moment(currentDate)
    let result = [currentDate.format('YYYY-MM-DD')]
    let threshhold = moment(currentDate).subtract(3,'month')
    while(threshhold.isBefore(currentDate)){
        let nextCycle = currentDate.subtract(7,'days').format('YYYY-MM-DD')
        if(threshhold.isBefore(nextCycle))
            result.push(nextCycle)
    }
    return result
}
console.log(getDateList(date))
//Output:
[
  '2021-06-06', '2021-05-30',
  '2021-05-23', '2021-05-16',
  '2021-05-09', '2021-05-02',
  '2021-04-25', '2021-04-18',
  '2021-04-11', '2021-04-04',
  '2021-03-28', '2021-03-21',
  '2021-03-14', '2021-03-07'
]

应该有更简洁的代码编写方式,没有时间清理代码,请随意编辑代码。

***建议:momentjs已贬值,请改用dayjs