Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 日期函数的逻辑错误_Javascript_Date - Fatal编程技术网

Javascript 日期函数的逻辑错误

Javascript 日期函数的逻辑错误,javascript,date,Javascript,Date,您好,我想在开始时说的是,我知道setMonth()的语法是从0到11。所以我想做的是我有一个下拉菜单。在那里,你可以在11月和12月之间进行选择,并在其中一个月中选择一天。如果选择的日期是圣诞节前4个星期日的时间或之后,则应根据我所见证的星期日数点亮蜡烛。(临期花环) 我的问题如果我在下拉菜单中选择十一月,我的日期对象仍然是十二月,我不知道为什么。代码如下: function adventCalculate() { for(i=1;i<=4;i++) { //Resets the Ou

您好,我想在开始时说的是,我知道setMonth()的语法是从0到11。所以我想做的是我有一个下拉菜单。在那里,你可以在11月和12月之间进行选择,并在其中一个月中选择一天。如果选择的日期是圣诞节前4个星期日的时间或之后,则应根据我所见证的星期日数点亮蜡烛。(临期花环)

我的问题如果我在下拉菜单中选择十一月,我的日期对象仍然是十二月,我不知道为什么。代码如下:

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.";
}

}
函数计算(){
对于(i=1;i=1;){
圣诞节设定日期(12月);
var whatDay=xmas.getDay();
如果(whatDay==0){
adventSonntagDate[i-1]=xmas.getDate();
adventSonntagMonth[i-1]=xmas.getMonth();
adventSonntagAusgabe[i-1]=“The”+i+”。降临节在“+xmas.getDate()+”+(xmas.getMonth()+1+”);
我--;
}
如果(12月>0){
十二月--;
}否则{
圣诞节。设定月(10);
12月30日;
}
}
变异数;
var aktDate;
//这样可以显示蜡烛的图像。我添加了30个,以便我的脚本可以比较
//从11月30日到12月1日。我的脚本在12月的所有日子里加了30天,所以30我刚刚运行了这段代码

var advent = new Date();
advent.setMonth(10);
alert(advent.getMonth());
它发出了警报
11

为什么?

因为今天是本月31号。明天再运行一次,它就不会这样做了

您创建了今天的日期(3月31日),并将月份更改为11月。但是,11月31日当然不存在。当您为JavaScript
date
对象指定无效值时,日期会向前滚动。因此,在调用
setMonth
后,您的日期
advent
实际上包含12月1日

我建议一次性创建日期,这样
降临节
就不会有一个无效的前滚中间日期:

var advent = new Date(new Date().getYear(), month - 1, day);

哇…哇…只是谢谢,我从来没有注意到。真的谢谢你,你是我的英雄!@Jakob:不用担心,很高兴能帮上忙。