嗨所以我想在开始时说我知道setMonth()的语法是从0到11.所以我想做的是我有一个下拉菜单。在那里你可以选择11月到12月之间,并选择其中一个月的一天。如果选择的日期是在圣诞节前的4个星期日或之后,它应该根据我目睹的星期日数点燃蜡烛。 (来临花圈)。
我的问题如果我在下拉菜单中选择了11月,我的日期对象仍然在12月,我不知道为什么。这是代码:
function adventCalculate() {
for(i=1;i<=4;i++) { //Resets the Output field
document.getElementById("f"+i).style.visibility='hidden';
document.getElementById("txtf"+i).innerHTML="";
}
var a = document.getElementById("mm");
var month = a.options[a.selectedIndex].value;
//Gets the value of the drop down field
var b = document.getElementById("dd");
var day = b.options[b.selectedIndex].value;
var advent = new Date();
advent.setMonth(month-1); //advent.setMonth is always 11, even if i put 10 in the parameter manually
advent.setDate(day);
var xmas = new Date();
xmas.setDate(24);
xmas.setMonth(11);
var adventSonntagDate = new Array(4);
var adventSonntagMonth = new Array(4);
var adventSonntagAusgabe = new Array(4);
var december = 24;
//this checks how many advent sundays ive witnessed
for(i=4;i>=1;) {
xmas.setDate(december);
var whatDay = xmas.getDay();
if(whatDay==0) {
adventSonntagDate[i-1] = xmas.getDate();
adventSonntagMonth[i-1] = xmas.getMonth();
adventSonntagAusgabe[i-1] = "The "+i+". Advent was at "+xmas.getDate()+"."+(xmas.getMonth()+1+".");
i--;
}
if(december>0) {
december--;
} else {
xmas.setMonth(10);
december = 30;
}
}
var adventDate;
var aktDate;
//This lets the images of the candle appear. i add 30 so that my script can compare
//30.November to 1.December. My script adds 30 to all december days so 30<31.
// But because of the bug with the date function my site cant distinguish between
//November and December
for(k=0;k<adventSonntagDate.length;k++) {
if(adventSonntagMonth[k]==10) {
adventDate = adventSonntagDate[k];
} else if(adventSonntagMonth[k]==11) {
adventDate = adventSonntagDate[k] + 30;
}
console.log("Der eingegeben Monat ist "+advent.getMonth());
if(advent.getMonth()==10) {
aktDate = advent.getDate();
}else if(advent.getMonth()==11) {
aktDate = advent.getDate() + 30;
}
console.log(adventSonntagDate[k]+" = AdventSonntagDate");
console.log(adventDate+" = adventDate");
console.log(advent.getDate()+" = Advent.getDate()");
console.log(aktDate+" = Help2");
console.log("---");
if(adventDate<=aktDate) {
document.getElementById("f"+(k+1)).style.visibility='visible';
document.getElementById("txtf"+(k+1)).innerHTML=adventSonntagAusgabe[k];
}
}
var eve = 30 + 24;//Nov + Dec Xmas
var eve2 = eve - aktDate;
if(eve2>-1) {
document.getElementById("txtf5").innerHTML=+eve2+" days left until christmas."
}else {
document.getElementById("txtf5").innerHTML="Christmas already passed.";
}
}
感谢您对我的长代码的耐心,并原谅我的语法错误而不是我的母语。
答案 0 :(得分:0)
我刚刚运行了这段代码
var advent = new Date();
advent.setMonth(10);
alert(advent.getMonth());
并提醒11
。
为什么?
因为今天是本月的第31个月。明天再次运行,它不会这样做。
您创建今天的日期(3月31日),并将月份更改为11月。但当然,11月31日不存在。当您为JavaScript Date
对象提供无效值时,日期会“向前滚动”。因此,在致电setMonth
后,您的约会advent
实际上包含了12月1日的日期。
我建议一次创建日期,因此advent
永远不会有无效的中间日期:
var advent = new Date(new Date().getYear(), month - 1, day);