2017-02-23 179 views
1

這是我的帖子的升級版:Jquery add month to date如何在for循環中添加不同月份的日期?

我需要通過將一個不同的月份添加到n.total賬單來安排發票的日期從開始日期。日期不是月份的最後一天,但是開始的那一天,如果一天的日子太過分了(2月30日或11月31日),則減少到月份的最後一天。

第一個日期將是開始日期。 第二個日期將在開始日期後5個月。 第三個日期將在開始日期後1年。 第四個日期到最大發票將每6個月。

例如: dateStart:30/09/2015 maxInv:6

  1. 發票1:30-09-2015
  2. 發票2:29-02-2016(閏年)
  3. 發票3:30-09-2016
  4. 發票4:30-03-2017
  5. 發票5:30-09-2017
  6. 發票6:30-03-2018

又如: dateStart:31/08/2018 maxInv:6

  1. 發票1:31-08-2018
  2. 發票1:31-01-2019
  3. 發票1:31-08-2019
  4. 發票2:29-02-2020(閏年)
  5. 發票3:31-08-2020
  6. Invoi CE 4:28-02-2021

任何建議,歡迎

PS我已經嘗試了兩種不同的解決方案 這http://jsfiddle.net/J3cPD/112/

var dateStart="31-08-2018"; 
 
var splitSrt = dateStart.split("-"); 
 
var dateSrt = new Date(splitSrt[2], splitSrt[1] - 1, splitSrt[0]); 
 
var nBill=10; 
 
var mthBill=6; 
 
    
 
for (var i=1 ; i<=nBill ; i++){ 
 
     if(i===1){ 
 
       srvDay = new Date(dateSrt.getFullYear(), dateSrt.getMonth(), dateSrt.getDate()); 
 
     }else if(i===2){ 
 
       newDate = dateSrt.addMonths(mthBill - 1); 
 
       srvDay = new Date(newDate.getFullYear(), newDate.getMonth(), newDate.getDate()); 
 
       newDate = dateSrt.addMonths(1); 
 
     }else if(i<=nBill){ 
 
       newDate = dateSrt.addMonths(mthBill); 
 
       srvDay = new Date(newDate.getFullYear(), newDate.getMonth(), newDate.getDate()); 
 
     } 
 
     srvDay= srvDay.toString('dd-MM-yyyy'); 
 
     $(".demo").append("<label>"+srvDay+"</label><br>"); 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<script src="http://www.datejs.com/build/date.js" type="text/javascript"></script> 
 
<div class="demo"></div>

https://jsfiddle.net/hbud1h10/

var dateStart="31-08-2018"; 
 
    var splitSrt = dateStart.split("-"); 
 
    var dateSrt = new Date(splitSrt[2], splitSrt[1] - 1, splitSrt[0]); 
 
    var currentDay = dateSrt.getDate(); 
 
    var nBill=10; 
 
    var mthBill=6; 
 
    
 
    for (var i=1 ; i<=nBill ; i++){ 
 
    \t \t var currentMonth = dateSrt.getMonth(); 
 
    \t \t if(i===1){ 
 
      currentMonth=currentMonth; 
 
     }else if(i===2){ 
 
     \t \t currentMonth=currentMonth+(mthBill-1); 
 
     }else if(i<=nBill){ 
 
     \t \t currentMonth=currentMonth+(mthBill); 
 
     } 
 
     dateSrt.setMonth(currentMonth, currentDay); 
 
     if (dateSrt.getMonth() > currentMonth + 1) \t dateSrt.setDate(0); 
 
     srvDay= dateSrt.toString('dd-MM-yyyy'); 
 
     $(".demo").append("<label>"+srvDay+"</label><br>"); 
 
     
 
     if(i===2){ 
 
      dateSrt.setMonth(currentMonth+1, currentDay); 
 
      if (dateSrt.getMonth() > currentMonth + 1) \t dateSrt.setDate(0); 
 
     } 
 
     
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<div class="demo"></div>

+0

願你的代碼添加到問題(見[MCVE]) – evolutionxbox

+0

PS我已經嘗試了兩種不同的解決方案 這個 http://jsfiddle.net/J3cPD/112/ 和這個 https://jsfiddle.net/hbud1h10/ –

+0

你可以展示你的嘗試。 –

回答

1

你可以這樣來做:

function printInterval(startDate, maxInvoice) { 
 
    var splitSrt = startDate.split('-'); 
 
    var dateSrt = new Date(splitSrt[2], splitSrt[1] - 1, splitSrt[0]); 
 
    var currentDay = dateSrt.getDate(); 
 
    var billsCount = 6; 
 
    
 
    $('.demo').append('<div><b>Start date: ' + startDate + ', Max Invoice: ' + maxInvoice + '</b></div>'); 
 

 
    for (var i = 0, j = 0; i < billsCount; i++) { 
 
     var newDate = new Date(dateSrt.getTime()); 
 
     newDate.setMonth(dateSrt.getMonth() + j, currentDay); 
 

 
     if (newDate.getMonth() > (dateSrt.getMonth() + j) % 12) { 
 
      newDate.setDate(0); 
 
     } 
 

 
     var txtDay = $.datepicker.formatDate('dd-mm-yy', newDate); 
 
     $('.demo').append('<div>'+ (i + 1) + '. Invoice ' + (i + 1) + ': ' + txtDay + '</div>'); 
 

 
     if (i === 0) { 
 
      j += 5; 
 
     } else if (i === 1) { 
 
      j += 7; 
 
     } else { 
 
      j += maxInvoice; 
 
     } 
 
    } 
 
} 
 

 
printInterval('30-09-2015', 6); 
 
printInterval('31-08-2018', 6);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script> 
 
<div class="demo"></div>

JSFiddle

+1

你救了我......謝謝!!! –