我试图从日期字符串中获取月份,只要该日不是该月的第一天(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>
Run Code Online (Sandbox Code Playgroud)
返回:11应该返回:12
如果日期字符串是2013-8-01,那么将返回7,当它应该是8.在"getMonth()"之后没有"+1",那么将返回6而不是7.
实际问题在于计算机的时区.
假设您的计算机处于东部时间(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)"
Run Code Online (Sandbox Code Playgroud)
请注意,日期实际上是11月,因为它落后了几个小时,因此零索引月份将是10.当您不提供时间字符串时,JavaScript会自动采用UTC.
该
getMonth()方法根据当地时间返回指定日期的月份,作为从零开始的值(其中零表示一年中的第一个月).
在本地时间,此Date对象代表11月30日19:00(晚上7点),因此getMonth()返回10:
foo.getMonth(); // 10
foo.getUTCMonth(); // 11
Run Code Online (Sandbox Code Playgroud)
如果您不关心时区而只是处理日期,也许可以考虑使用这些getUTC*方法.
您可以在Date此处阅读有关该对象的更多信息 希望这可以帮助.
JavaScript 正在做它应该做的事情。在日值中,它将解释为01,0该日的零值被解释为上个月的最后一天。这就像要求 31 天的一个月中有 32 天一样。这将返回下个月第一天的日期。