【问题标题】:How can I add different month to a date in a for cycle? [duplicate]如何在 for 循环中为日期添加不同的月份? [复制]
【发布时间】:2017-02-23 13:03:37
【问题描述】:

这是我帖子的升级版:Jquery add month to date

我需要通过向 n.total 账单添加不同的月份来安排从开始日期开始的发票日期。日期不是当月的最后一天,而是开始的那一天,如果这一天对于当月来说太长(2 月 30 日或 11 月 31 日),请减少到当月的最后一天。

第一个日期将是开始日期。 第二个日期将是开始日期后的 5 个月。 第三个日期将是开始日期后的 1 年。 最高发票的第四个日期将每 6 个月一次。

例如: 开始日期:30/09/2015 maxInv: 6

  1. 发票 1:30-09-2015
  2. 发票 2:29-02-2016(闰年)
  3. 发票 3:30-09-2016
  4. 发票 4:2017 年 3 月 30 日
  5. 发票 5:2017 年 9 月 30 日
  6. 发票 6:30-03-2018

另一个例子: 日期开始: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. 发票 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++ ){
  		var currentMonth = dateSrt.getMonth();
  		if(i===1){
          currentMonth=currentMonth;
      }else if(i===2){
      		currentMonth=currentMonth+(mthBill-1);
      }else if(i<=nBill){
      		currentMonth=currentMonth+(mthBill);
      }
      dateSrt.setMonth(currentMonth, currentDay);
      if (dateSrt.getMonth() > currentMonth + 1) 	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) 	dateSrt.setDate(0);
      }
      
  }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div class="demo"></div>

【问题讨论】:

标签: javascript jquery html date


【解决方案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

【讨论】:

  • 你救了我……谢谢!!!
猜你喜欢
  • 2011-08-04
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
  • 2018-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多