使用javascript循环数月

时间:2018-03-25 08:40:39

标签: javascript jquery html

我有一个日期texbox来选择一个日期,通过使用选定的月份,我需要循环几个月。例如,如果我选择今天的日期,我需要将三月显示为开始月份并循环显示n次的月份。但我在这里面临的问题是,在12月之后,我收到undefined错误。

知道怎么解决吗?

小提琴:https://jsfiddle.net/anoopcr/fyaeyg7r/

HTML:

<div class="inputQL">
  <div class="InputQuest">Loan start date</div>
  <div> 
    <input type="date" id="date" class="date"></input>
  </div>
  <div id="hiddendate" class="hiddendate"></div>
</div>

<div id="table_header" class="table_header">
  <table cellpadding="15" border="1">
    <tr>
      <td width="100" align="center"><b>SI No</b></td>
      <td width="100" align="center"><b>month</b></td>
      <td width="100" align="center"><b>balance</b></td>
    </tr>
  </table>
</div>

<div id="table" class="table"> </div>

Javascript:

date.onchange = function() {
  table();
}

$(document).ready(function() {
  document.getElementById("date").valueAsDate = new Date();
  table();
})


function table() {
  var mo = new Array(12);
  mo[0] = "January";
  mo[1] = "February";
  mo[2] = "March";
  mo[3] = "April";
  mo[4] = "May";
  mo[5] = "June";
  mo[6] = "July";
  mo[7] = "August";
  mo[8] = "September";
  mo[9] = "October";
  mo[10] = "November";
  mo[11] = "December";

  var date = new Date(document.getElementById("date").value);
  var day = date.getUTCDate();
  var month = mo[date.getUTCMonth()];
  var year = date.getFullYear();

  document.getElementById("hiddendate").innerHTML = month;

  var loanstart = month;
  var amnttext = 1;
  var payment_counter = 1;

  var table = "";

  table += "<table cellpadding='15' border='1'>";

  var n = 0;
  while (amnttext < 24) {

    var loanstart = mo[date.getUTCMonth() + n];

    //display rows
    table += "<table cellpadding='15' border='1'>";
    table += "<tr>";

    table += "<td width='100'>" + payment_counter + "</td>";
    table += "<td width='100'>" + loanstart + "</td>";
    table += "<td width='100'>" + amnttext + "</td>";

    if (n < 12) {
      n++;
    } else {
      n = 0;
    }

    amnttext++;

    payment_counter++;

  table += "</table>";

  document.getElementById("table").innerHTML = table;
}

2 个答案:

答案 0 :(得分:1)

一个问题是您可以在

中访问数组mo
var loanstart = mo[date.getUTCMonth()+n];

取12的模数,并修复访问冲突:

var loanstart = mo[(date.getUTCMonth()+n) % 12];

P.S。:当@Vimarsh观察到,使用模数时可以完全删除条件if (n < 12)

答案 1 :(得分:0)

在你的代码中,当n = 11时,你增加它而不是使它为0。 现在n = 12,你得到错误,因为mo [12]超出范围。

您只需将代码段更改为

即可
if (n<11) {
    n++;
} else {
    n=0;
} 

虽然,我同意@ milbrandt的答案是一种更清晰的方式来处理这个用例。