我有一个日期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;
}
答案 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的答案是一种更清晰的方式来处理这个用例。