如果day为01,则Javascript日期返回错误的月份

时间:2014-08-13 14:24:52

标签: javascript date

我试图从日期字符串中获取月份,只要该日不是该月的第一天(01),这就可以正常工作。如果该日是第一天,则返回上个月:

<!DOCTYPE html>
<html>
<body>
<p>Click the button to display the month.</p>
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>

<script>
function myFunction() {
    var str="2014-12-01"
    var d = new Date(str); 
    var m = d.getMonth()+1;
    document.getElementById("demo").innerHTML = m;
}
</script>

</body>
</html>

返回:11 应该回归:12

如果日期字符串是2013-8-01,那么将返回7,当它应该是8.没有&#34; + 1&#34;在&#34; getMonth()&#34;之后然后返回6而不是7.

3 个答案:

答案 0 :(得分:6)

实际问题在于您计算机的时区。

假设您的计算机位于Eastern Time(GMT-5):

var foo = new Date('2014-12-01');

foo.toUTCString(); // "Mon, 01 Dec 2014 00:00:00 GMT"
foo.toISOString(); // "2014-12-01T00:00:00.000Z"
foo.toString(); // "Sun Nov 30 2014 19:00:00 GMT-0500 (Eastern Standard Time)"

请注意,该日期实际上是11月,因为它落后了几个小时,因此零索引月份为10.当您不提供时间字符串时,JavaScript会自动采用UTC。

  

getMonth()方法根据当地时间返回指定日期的月份,作为从零开始的值(其中零表示一年中的第一个月。

在本地时间,此Date对象代表11月30日19:00(晚上7点),因此getMonth()返回10:

foo.getMonth(); // 10
foo.getUTCMonth(); // 11

如果您不关心时区而只是处理日期,可以考虑使用getUTC*方法。

You can read more about the Date object here.希望这有帮助。

答案 1 :(得分:0)

JavaScript正在做它应该做的事情。在日期值中,它将01解释为0,并将当天的零值解释为上个月的最后一天。这就像在31个月内要求一个月中的第32天。这将返回下个月第一天的日期。

答案 2 :(得分:0)

getMonth()返回0到11之间的值:http://www.w3schools.com/jsref/jsref_getmonth.asp 1月是0,2月是1,依此类推。

因此,要获得“正确的”#39;一个月,你应该做+1。