在 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')
当 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
。
给定一个 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')
当 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
。