给定开始日期(一年中的任何日期(,我需要回到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'))
}
哪个返回:
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')
,并在currentDate
位于threshhold
之前时中断循环。
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
。