带有日期功能的逻辑错误 [英] Logical mistake with Date function
问题描述
所以我想开始说,我知道setMonth()的语法是从0到11.所以我想做的是我有一个下拉菜单。在那里你可以选择在十一月和十二月之间选择一个月的一个月。如果选择的日期是在圣诞节前的四个星期之前或之后,它应该根据我目睹的星期天的数量点燃蜡烛。 (出现花圈)。
Hi so what i want to say at the beginning i know that the syntax for setMonth() is from 0 - 11. So what i want to do is i have a drop down menu. there you can choose between november and december and pick a day in one of those months. if the picked date is while or after 4 sundays before christmas it should light candles based on the numbers of sundays i have witnessed. (advent wreath).
我的问题如果我在下拉菜单中选择十一月,我的日期对象仍然在十二月,我不知道为什么。这是代码:
My Problem if i pick november in my drop down menu my date object is still in december and i dont know why. Here is the code:
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.";
}
}
感谢您的耐心与我的长我的语法错误不是我的母语。
Thanks for your patience with my long code and excuse my grammar mistakes not my mother tongue.
推荐答案
我刚刚运行这段代码
var advent = new Date();
advent.setMonth(10);
alert(advent.getMonth());
,并提醒 11
。
为什么?
因为今天是本月31日。明天再运行,不会这样做。
Because today is the 31st of the month. Run it again tomorrow and it won't do this.
您创建今天的日期(3月31日),并将该月份更改为11月。但当然,11月31日不存在。当您向JavaScript Date
对象提供无效值时,日期将被滚动转发。所以在调用 setMonth
之后,你的日期 advent
实际上包含12月1日的日期。
You create today's date (31st March), and change the month to November. But of course, 31st November does not exist. When you give invalid values to the JavaScript Date
object, the date gets 'rolled' forwards. So after calling setMonth
your date advent
actually contains the date 1st December.
我建议一次创建日期,所以 advent
从来没有一个无效的中间日期被卷入前进:
I would recommend creating the date in one go, so advent
never has an invalid intermediate date that gets rolled forward:
var advent = new Date(new Date().getYear(), month - 1, day);
这篇关于带有日期功能的逻辑错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!