我试图从日期字符串中获取月份,只要该日不是该月的第一天(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.
答案 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*
方法。
答案 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。