2015-02-25 5 views
1

Мне нужно рассчитать месячные даты, т. Е. На определенную дату, создать даты на следующие 2 года, например. Я придумал следующий код:Javascript: Как генерировать ежемесячные даты?

var d = new Date('2007-12-31'); 
    d.setMonth(d.getMonth() + 1); 
    for (var i = 1; i<24; i++){ 
    var newdate = d.getDate() + "-" + d.getMonth()+i + '-' + d.getFullYear() 
    print(newdate); 
    } 

Однако, это производит:

(...) 
31-06-2008 (ok) 
31-07-2008 (ok) 
31-08-2008 (ok) 
31-09-2008 (ok) 
31-010-2008 (error, 3 characters for month) 
31-011-2008 (error, 3 characters for month) 
31-012-2008 (error, 3 characters for month) 
31-013-2008 (error, should be 31-01-2009) 
31-014-2008 (error, should be 28-02-2009) 

Пожалуйста, есть ли способ производить ежемесячные даты рассмотрения некоторых месяцев 30 или 31 дней, а февраль 28 или 29 в зависимости от лет? Благодаря!

ответ

1

Попробуйте следующее:

var d = new Date(2007, 11, 31); 
d.setDate(d.getDate()+1); 
for(i=1; i<24; i++) { 
    d.setMonth(d.getMonth()+1); 
    d.setDate(1); 
    d.setDate(d.getDate()-1); 
    document.write(d.getDate() + "-" + ("0" + (d.getMonth()+1)).slice(-2) + '-' + d.getFullYear() + '<br />'); 
    d.setDate(d.getDate()+1); 
    } 
  1. Шаг вперед один месяц
  2. Установите дату для первого месяца
  3. Шаг назад один день (последний день предыдущего месяца)
  4. Написать дату (добавьте 0 и используйте slice(), чтобы получить последние два символа)
  5. Шаг вперед на один день, чтобы вернуться на следующий месяц
  6. Increment месяц
+0

Он работал как шарм! Спасибо, это было очень запутанно для меня! – iamgin

2

У вас такой сибмол «011» из-за «0» + 11 в js он равен 011. Таким образом, вы должны сделать так, чтобы этот номер +(d.getMonth()) был номером перед суммой.

Этот код должен быть правильным:

var d = new Date('2007-12-31'); 
    d.setMonth(d.getMonth() + 1); 
    for (var i = 1; i<24; i++){ 
    var newdate = d.getDate() + "-" + (+(d.getMonth()) + i) + '-' + d.getFullYear() 
    console.log(newdate); 
    } 
+0

2 года = 24 месяцев ^^ – Pogrindis

+1

фиксированный от 12 до 24 –

3

Как это:

var d = new Date(); 

for (var i = 0, size = 24; i < size; i++){ 
    d.setMonth(d.getMonth() + 1); 
    console.log(d.getDate() + "-" + (d.getMonth() + 1) + '-' + d.getFullYear()) 
} 
1

После первых 12 месяцев, необходимо увеличивать год и месяц сбросить до 0. Вы пытаетесь сохранить увеличиваем месяц за 12 месяцев.