JavaScript-For Loop在一个月对象中添加天数-moment.js

时间:2018-10-22 19:18:05

标签: javascript for-loop momentjs

我试图将当月的每一天分配给我的对象,但是我只得到每个月的最后一天。我应该怎么做才能获得整月的工作?

function loopRange (startDate, range) {
   let fromDate = moment(startDate)
   let toDate = moment(startDate).add(range, 'month')
   let dates = {}

   for (let m = moment(fromDate); m.diff(toDate, 'days') <= 0; m.add(1, 'days')) {
        dates['month_' + m.format('MM')] = {
           'date': m.format('YYYY-MM-DD')
        }
    }

    return dates
}

我想要的结果:

dates = {month_11: ['2018-11-01', '2018-11-02', ...]}

1 个答案:

答案 0 :(得分:2)

您只得到最后一天,因为for-loop提前了一天。

但是,当分配给dates的dic时,您将月份作为关键字-因此每次迭代(在同一月份内)都会用新的日期覆盖前一个关键字->这样您就只能得到几个月...

如果要让时间范围内的所有日期都是数组元素在月份键上划分,则可以使用以下代码:

for (let m = moment(fromDate); m.diff(toDate, 'days') <= 0; m.add(1, 'days')) 
{
    let month_key = 'month_' + m.format('MM'); 
    if (!dates.hasOwnProperty(month_key))
        dates[month_key] = []; 
    dates[month_key].push(m.format('YYYY-MM-DD'));
}