JavaScript函数date.getMonth()没有检索正确的月份数? (11而不是8)

时间:2016-09-26 21:52:51

标签: javascript function date

首先,这不是关于getMonth从0-11而不是1-12返回数字,对不起我的英语。

我想制作一个简单的程序,在浏览器上显示当前日期,例如“9月是月,26是日​​,2016年是”。我这样做了:

!DOCTYPE HTML>
<html>
<body>
    <p id="test"></p>               // this is where date will be displayed
    <script>
        var date = new Date();      // i get the date 
        var m = date.getMonth();    // i get the month
        var fm;                     // all this is to convert number to month name
        if (m=0){fm="January";}
        if (m=1){fm="February";}
        if (m=2){fm="March";}
        if (m=3){fm="April";}
        if (m=4){fm="May";}
        if (m=5){fm="Jun";}
        if (m=6){fm="July";}
        if (m=7){fm="August";}
        if (m=8){fm="September";}
        if (m=9){fm="October";}
        if (m=10){fm="November";}
        if (m=11){fm="December";}
        else {fm="Error01"}
        var d = date.getDate();      // the day
        var y = date.getFullYear();
        //document.getElementById("test").innerHTML= fm + " is the month, " + d + " is the Date(day) and "+ y + " is the full year"; 
        // i removed this ^ to highlight the new output below:
        document.getElementById("test").innerHTML= date + "<br>" + m + " - " + fm;
    </script>
</body>
</html>

此时输出应为:

  

2016年9月26日星期一23:38:39 GMT + 0200(ora legale Europa occidentale)

     

8 - 9月

(“Ora legale Europa occidentale”=我当地时间,这里不应该相关)。

但由于某些原因,这是我在运行程序时得到的结果:

  

周一 9月 26 2016 23:38:39 GMT + 0200(ora legale Europa occidentale)

     

11 - 12月

月份在日期中是正确的(表示“9月”),但在另一个输出中错误(m =“11”导致var fm为“12月”) 为什么?? :(

3 个答案:

答案 0 :(得分:6)

您应该使用==而不是=; =正在分配,==正在进行比较。

但是,通过使用数组映射月份名称,可以使代码更加优雅。

 <script>
            var date = new Date();      // i get the date 
            var m = date.getMonth();    // i get the month
            var monthMap = ["January", "Febrauary", "Mar..", "Apr..", "May", "June", "July", "Aug..", "Sept", "Oct", "Nov", "Dec"];
            var d = date.getDate();      // the day
            var y = date.getFullYear();
            //document.getElementById("test").innerHTML= monthMap[m] + " is the month, " + d + " is the Date(day) and "+ y + " is the full year"; 
            // i removed this ^ to highlight the new output below:
            document.getElementById("test").innerHTML= date + "<br>" + m + " - " + monthMap[m];
        </script>

将8月和其他必要的月份名称替换为8月

答案 1 :(得分:3)

您不断更改代码中m和fm的值:

if (m=0){fm="January";}
...
if (m=11){fm="December";}

...将m设置为零,然后设置为1,然后设置为2 ......最后一个运行的是m = 11和fm到12月,这将始终发生。

将if语句中的=更改为==以进行修复。并删除else,如果正确使用else,或使用开关(写入的else仅适用于LAST if子句)。

如果here

,请参阅有关其他内容的部分

答案 2 :(得分:1)

您的代码存在两个问题。首先,您要在if语句中分配变量而不是测试它们。

if(m=0){fm="January"}

以上是错误的,因为您正在说m = 0,然后if语句运行,因为m = 0被解析为m为0,这意味着是,变量{ {1}}存在,因此if条件为true且代码运行。这一直持续到最后一个,它的值为11,所以fm =&#39; 12月&#39;。

第二个问题是最后一个条件,假定检查月份是否是有效值,如果它不是以明显的方式表示,实际上并没有这样做。

m

当月份不是12月时,else语句正在运行,因为它只连接到12月if语句。通过在first else if语句之后创建所有if语句,我们可以解决这个问题,并使原始代码工作。

&#13;
&#13;
else {fm="Error01"}
&#13;
&#13;
&#13;