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

emi*_*ily 4 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>
Run Code Online (Sandbox Code Playgroud)

返回:11应该返回:12

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

rin*_*t.6 6

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

假设您的计算机处于东部时间(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此处阅读有关该对象的更多信息 希望这可以帮助.


j08*_*691 0

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