我有以下代码用于生成从今天开始的未来 12 个月(含)的列表:
function DateUtilFunctions() {
var self = this;
var monthNames = new Array();
monthNames[0] = "January";
monthNames[1] = "February";
monthNames[2] = "March";
monthNames[3] = "April";
monthNames[4] = "May";
monthNames[5] = "June";
monthNames[6] = "July";
monthNames[7] = "August";
monthNames[8] = "September";
monthNames[9] = "October";
monthNames[10] = "November";
monthNames[11] = "December";
self.getNext12MonthNamesWithYear = function () {
var months = new Array();
var today = new Date(Date());
var loopDate = new Date();
loopDate.setTime(today.valueOf());
var todayPlus12Months = new Date(today.setMonth(today.getMonth() + 12));
while (loopDate.valueOf() < todayPlus12Months.valueOf()) {
alert(loopDate);
alert(loopDate.getMonth());
var month = monthNames[loopDate.getMonth()];
months.push(month + ' ' + loopDate.getFullYear());
loopDate.setMonth(loopDate.getMonth() + 1);
}
return months;
};
}
调用的结果getNext12MonthNamesWithYear()
是:
- “2012 年 5 月”
- “2012 年 7 月”
- “2012 年 8 月”
- “2012 年 5 月”
- “2012 年 7 月”
- “2012 年 8 月”
- “2012 年 9 月”
- “2012 年 10 月”
- “2012 年 11 月”
- “2012 年 12 月”
- “2013 年 1 月”
- “2013年2月”
- “2013 年 3 月”
- “2013年4月”
- “2013 年 5 月”
如您所知,列表的开头有点奇怪,因为缺少“六月”,加上“五月”、“七月”和“八月”出现了两次。
自然地,我在这里做错了;有人可以帮帮我吗?
编辑:
根据 micadelli 的评论,这是我使用的解决方案:
function DateUtilFunctions() {
var self = this;
var monthNames = new Array();
monthNames[0] = "January";
monthNames[1] = "February";
monthNames[2] = "March";
monthNames[3] = "April";
monthNames[4] = "May";
monthNames[5] = "June";
monthNames[6] = "July";
monthNames[7] = "August";
monthNames[8] = "September";
monthNames[9] = "October";
monthNames[10] = "November";
monthNames[11] = "December";
self.getNext12MonthNamesWithYear = function () {
var months = new Array();
var today = new Date();
var tmpDate = new Date();
var tmpYear = tmpDate.getFullYear();
var tmpMonth = tmpDate.getMonth();
var monthLiteral;
for (var i = 0; i < 12; i++) {
tmpDate.setMonth(tmpMonth + i);
tmpDate.setFullYear(tmpYear);
monthLiteral = monthNames[tmpMonth];
months.push(monthLiteral + ' ' + tmpYear);
tmpYear = (tmpMonth == 11) ? tmpYear + 1 : tmpYear;
tmpMonth = (tmpMonth == 11) ? 0 : tmpMonth + 1;
}
return months;
};
}