Результат получения следующих 12 месяцев в Javascript испорчен

У меня есть следующий код для создания списка следующих 12 месяцев (включительно ), начиная с сегодняшней даты:

function DateUtilFunctions() {
    var self = this;

    var monthNames = new Array();

    monthNames[0] = "January";
    monthNames[1] = "February";
    monthNames[2] = "March";
    monthNames[3] = "April";
    monthNames[4] = "May";
    monthNames[5] = "June";
    monthNames[6] = "July";
    monthNames[7] = "August";
    monthNames[8] = "September";
    monthNames[9] = "October";
    monthNames[10] = "November";
    monthNames[11] = "December";

    self.getNext12MonthNamesWithYear = function () {
        var months = new Array();
        var today = new Date(Date());

        var loopDate = new Date();
        loopDate.setTime(today.valueOf());

        var todayPlus12Months = new Date(today.setMonth(today.getMonth() + 12));

        while (loopDate.valueOf() < todayPlus12Months.valueOf()) {
            alert(loopDate);
            alert(loopDate.getMonth());
            var month = monthNames[loopDate.getMonth()];


            months.push(month + ' ' + loopDate.getFullYear());
            loopDate.setMonth(loopDate.getMonth() + 1);
        }

        return months;
    };
}

Результатом вызова getNext12MonthNamesWithYear()является:

  • «Май 2012»
  • «Июль 2012»
  • «Август 2012»
  • «Май 2012»
  • «Июль 2012»
  • «Август 2012»
  • «Сентябрь 2012»
  • «Октябрь 2012»
  • «Ноябрь 2012»
  • «Декабрь 2012»
  • «Январь 2013»
  • «Февраль 2013»
  • «Март 2013»
  • «Апрель 2013»
  • «Май 2013»

Как видите, начало списка немного странное, в нем отсутствует «июнь», а «май», «июль» и «август» появляются дважды.

Естественно, я делаю что-то очень неправильное здесь; может кто-нибудь, пожалуйста, помогите мне?

РЕДАКТИРОВАТЬ:

Основываясь на комментарии микаделли, вот решение, которое я использовал:

function DateUtilFunctions() {
    var self = this;

    var monthNames = new Array();

    monthNames[0] = "January";
    monthNames[1] = "February";
    monthNames[2] = "March";
    monthNames[3] = "April";
    monthNames[4] = "May";
    monthNames[5] = "June";
    monthNames[6] = "July";
    monthNames[7] = "August";
    monthNames[8] = "September";
    monthNames[9] = "October";
    monthNames[10] = "November";
    monthNames[11] = "December";

    self.getNext12MonthNamesWithYear = function () {
        var months = new Array();
        var today = new Date();
        var tmpDate = new Date();
        var tmpYear = tmpDate.getFullYear();
        var tmpMonth = tmpDate.getMonth();
        var monthLiteral;

        for (var i = 0; i < 12; i++) {
            tmpDate.setMonth(tmpMonth + i);
            tmpDate.setFullYear(tmpYear);
            monthLiteral = monthNames[tmpMonth];

            months.push(monthLiteral + ' ' + tmpYear);

            tmpYear = (tmpMonth == 11) ? tmpYear + 1 : tmpYear;
            tmpMonth = (tmpMonth == 11) ? 0 : tmpMonth + 1;
        }

        return months;
    };
}
5
задан Jason Evans 31 May 2012 в 12:29
поделиться