воскресенье, 6 октября 2013 г.

JavaScript. Dates. Даты. setMonth();

    Был у меня один случай. Необходимо было пробежать по значениям дат, начиная от n-го года, заканчивая k-м, с шагом в один месяц. В один прекрасный момент, задав начальный год тысяча-девятьсот-шестьдесят-какой-то все нафиг повисло.
    Реализовано это было следующим образом:

var startDate = new Date('1960-01-01');
var endDate   = new Date('2010-01-01');
for(var i = startDate; i < endDate; i = new Date(i.getFullYear(), i.getMonth() + 1, 0))
{
// Что-то происходит
}


    Оказалось, что в прекрасный промежуток годов от 1982 до 1986 (кажется, но суть не важна), конструктор new Date(year, month, day) устанавливал месяц, равный month - 1, если подавалась цифра 2! И так, в цикле бесконечно устанавливался месяц, равный 1.
Решил проблему используя метод setMonth();

for(var i = startDate; i < endDate; i.setMonth(i.getMonth() + 1))
{
// Что-то происходит
}