使用MomentJS添加月份

时间:2015-10-28 15:11:02

标签: momentjs

我想使用MomentJS为我的currentDueDate添加一个月,但似乎无法使用几天......

我想保留一天加入一个月。

我想要这个:

  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
  7. 代码:

    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(应该是2016年3月30日)
    7. 编辑(整个代码):

        <!-- 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>
      

1 个答案:

答案 0 :(得分:0)

显然,包含天数293031的日期属于极端情况。此外,对于第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)