JavaScript - для цикла, чтобы добавить дни в месячном объекте - moment.js - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь назначить каждый день месяца моему объекту, но я получаю только последний день каждого месяца.Как мне сделать, чтобы получить полный месяц?

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 голосов
/ 22 октября 2018

Вы получаете только последний день, потому что ваш цикл for в интервале дня.

Однако, когда присваиваете значение dic в dates, вы ставите месяц в качестве ключа - так что каждая итерация (в пределах одной и той же итерации)month) переопределяет предыдущий ключ новым днем ​​-> таким образом, вы получаете только один свободный день месяца ...

Если вы хотите, чтобы все даты во временном диапазоне были разделены элементами массива на ключи месяцаВы можете использовать следующий код:

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'));
}
...