接下来12个月使用Javascript的结果是一团糟
我有以下代码来生成从今天开始的未来12个月(含12个月)的列表:接下来12个月使用Javascript的结果是一团糟,javascript,date,Javascript,Date,我有以下代码来生成从今天开始的未来12个月(含12个月)的列表: function DateUtilFunctions() { var self = this; var monthNames = new Array(); monthNames[0] = "January"; monthNames[1] = "February"; monthNames[2] = "March"; monthNames[3] = "April"; mont
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;
};
}
我看不出这有什么不起作用的原因
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);
tmpMonth = (tmpMonth == 11) ? 0 : tmpMonth+1;
tmpYear = (tmpMonth == 11) ? tmpYear+1 : tmpYear;
}
return months;
};
}
函数DateUtilFunctions(){
var self=这个;
var monthNames=新数组();
monthNames[0]=“一月”;
monthNames[1]=“二月”;
monthNames[2]=“三月”;
monthNames[3]=“四月”;
monthNames[4]=“五月”;
monthNames[5]=“六月”;
monthNames[6]=“7月”;
monthNames[7]=“八月”;
monthNames[8]=“9月”;
monthNames[9]=“10月”;
monthNames[10]=“11月”;
monthNames[11]=“12月”;
self.getNext12MonthNamesWithYear=函数(){
var months=新数组();
var today=新日期();
var tmpDate=新日期();
var tmpYear=tmpDate.getFullYear();
var tmpMonth=tmpDate.getMonth();
var每月一次;
对于(变量i=0;i<12;i++){
tmpDate.setMonth(tmpMonth+i);
tmpDate.setFullYear(tmpYear);
月数=月数[tmpMonth];
月推(每月+月推+tmpYear);
tmpMonth=(tmpMonth==11)?0:tmpMonth+1;
tmpYear=(tmpMonth==11)?tmpYear+1:tmpYear;
}
返回月份;
};
}
JS-Bin这是一个工作版本。如果值大于12,则不能直接执行setMonth。此外,在某些月份也没有出现会导致意外结果的情况。 我在这儿拉小提琴
var monthNames=new Array();
monthNames[0]=“一月”;
monthNames[1]=“二月”;
monthNames[2]=“三月”;
monthNames[3]=“四月”;
monthNames[4]=“五月”;
monthNames[5]=“六月”;
monthNames[6]=“7月”;
monthNames[7]=“八月”;
monthNames[8]=“9月”;
monthNames[9]=“10月”;
monthNames[10]=“11月”;
monthNames[11]=“12月”;
var today=新日期();
var currentMonth=today.getMonth();
var i;
对于(i=0;i<12;i++){
var newMonth=currentmount+i;
var newYear=newMonth>11?今天.getFullYear()+1:今天.getFullYear();
newMonth=newMonth>11?(newMonth-12):newMonth;
var newDate=新日期(新年、新月份,'1');
log(monthNames[newDate.getMonth()]+''+newDate.getFullYear());
}
不要试图操纵日期
对象-只需使用它获取月份和年份的初始值,然后对结果使用简单的算术运算即可:
function getNext12MonthNamesWithYear() {
var now = new Date();
var month = now.getMonth();
var year = now.getFullYear();
var names = ['January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November', 'December'];
var res = [];
for (var i = 0; i < 13; ++i) {
res.push(names[month] + ' ' + year);
if (++month === 12) {
month = 0;
++year;
}
}
return res;
}
函数getNext12MonthNamesWithYear(){
var now=新日期();
var month=now.getMonth();
var year=now.getFullYear();
变量名称=['一月','二月','三月','四月','五月','六月',
“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”];
var-res=[];
对于(变量i=0;i<13;++i){
res.push(名称[月份]+''+年份);
如果(++月份===12){
月份=0;
++年份;
}
}
返回res;
}
在进行演示时,我还需要一份过去12个月的清单这就是我所做的:
var theMonths = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
var today = new Date();
var aMonth = today.getMonth();
var i;
for (i=0; i<12; i++) {
document.writeln(theMonths[aMonth] + '<br>'); //here you can do whatever you want...
aMonth++;
if (aMonth > 11) {
aMonth = 0;
}
}
var theMonths=新数组(“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”);
var today=新日期();
var aMonth=today.getMonth();
var i;
对于(i=0;i 11){
aMonth=0;
}
}
这是我使用
未来12个月
let months=[];
让monthsRequired=12
对于(让i=1;我尝试了你的解决方案-几乎正确,除了“2012年7月”出现两次。我看不出有任何理由这样做。你能解释一下你的代码是什么吗?不必要的复杂,我有一个库,比如感谢你建议的“矩.js”。虽然我使用了不同的方法,但我会把这个js保留在我的工具列表中。不必要的复杂,我也可以跳过计数器,只做名称[(月+i)%12]
和年+(i/12 | 0)
@minitech是的,那会有用,但我是为了简单和清晰。@Alnitak-+1谢谢你的建议,我真的很喜欢清晰。
function getNext12MonthNamesWithYear() {
var now = new Date();
var month = now.getMonth();
var year = now.getFullYear();
var names = ['January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November', 'December'];
var res = [];
for (var i = 0; i < 13; ++i) {
res.push(names[month] + ' ' + year);
if (++month === 12) {
month = 0;
++year;
}
}
return res;
}
var theMonths = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
var today = new Date();
var aMonth = today.getMonth();
var i;
for (i=0; i<12; i++) {
document.writeln(theMonths[aMonth] + '<br>'); //here you can do whatever you want...
aMonth++;
if (aMonth > 11) {
aMonth = 0;
}
}