2015-10-28 5 views
0

Я хотел бы добавить месяц в мой currentDueDate используя MomentJS, но, похоже, не работает с днями ...Добавить месяц с помощью MomentJS

Я хочу, чтобы на следующий день при добавлении в месяц.

Я хочу это:

  1. 30/10/2015
  2. 30/11/2015
  3. 30/12/2015
  4. 30/01/2016
  5. 29/02/2016 (последний день месяца, когда 30 нет в текущем месяце)
  6. 30/03/2016

Код:

currentDueDate.add(1, 'M');

я получаю это:

  1. 30/10/2015
  2. 30/11/2015
  3. 30/12/2015
  4. 30/01/2016
  5. 29/02/2016
  6. 29/03/2016 (должно быть 30/03/2016)

Edit (весь код):

<!-- Calculs --> 

    <% var currentDueDate = moment(agreement.billbook.first_due_date) || moment(); %> 

    <% var nbLines = 6; %> 
    <% var monthToAdd = 1; %> 

    <!-- /Calculs --> 

    <table class="table">   

    <% for(var i = 0; i < nbLines; i++){ %> 

    <tr> 
     <td><%=i+1%></td> 
     <td><%=currentDueDate.format('L')%></td> 
     <td></td> 
     <td></td> 
     <td></td> 
     <td></td> 
    </tr> 

    <% currentDueDate.add(monthToAdd, 'M'); %> 

    <% } %> 

    </table> 

ответ

0

Очевидно, что дата с днями 29, 30 и 31 являются частными случаями. Кроме того, на день 31 есть еще один угловой случай, так как у всех месяцев нет 31 дня. То, что я предлагаю, чтобы иметь три functions охватить все сценарии:

1) dateWith31 
2) dateWith29And30 
3) dateWithRest - has the same flow what you have wrote 

switch currentDueDate.get('date') : 
    case 31 : 
    dateWith31(currentDueDate) 
    case 30 : 
    dateWith29And30(currentDueDate) 
    case 29 : 
    dateWith29And30(currentDueDate) 
    default : 
    dateWithRest(currentDueDate) 



function dateWith31(currentDueDate){ 
    for(var i = 0; i < nbLines; i++){ 
    currentDueDate.add(1,'M').endOf('M'); 
    } 
} 

function dateWith29And30(currentDueDate){ 
    var temp = currentDueDate.get('date'); //stores the original day 
    for(var i = 0; i < nbLines; i++){ 
    var prevMonth = currentDueDate.get('M'); 
    if(prevMonth === 1) //date has been changed in February and hence fix it 
     currentDueDate.add(1,'M').set('date',temp); 
    else 
     currentDueDate.add(1,'M'); 
    } 
} 

Надеется, что она может быть реализована на языке, который вы используете (я предполагаю, что это PHP)

+0

Я не хочу, чтобы получить в последние дни текущего месяца. Я нахожусь в 'forEach', поэтому я хочу сохранить день даты, за исключением случаев, когда следующая дата (с месяцем (+)) не имеет дня ... Если у даты нет дня, мы Я установил новый день с последним днем ​​в месяце ... – tonymx227

+0

@ tonymx227 - ваш вопрос не показывает цикл foreach. Пожалуйста, отредактируйте свой вопрос с помощью * полного * примера. –

+0

См. Редактирование всего кода. – tonymx227

Смежные вопросы