2017-02-23 180 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

你救了我......谢谢!!! –