我想使用MomentJS为我的currentDueDate
添加一个月,但似乎无法使用几天......
我想保留一天加入一个月。
我想要这个:
30
不在月份的最后一天)代码:
currentDueDate.add(1, 'M');
我明白了:
编辑(整个代码):
<!-- 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 :(得分: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)