setMonth(1)为什么会返回三月?

14
为什么setMonth(1)给我返回三月?我认为0=一月,1=二月,2=三月。
答案:为了解决这个问题,请使用setMonth()方法时将月份减1,因为JavaScript中的月份是从0开始计数的。
<!DOCTYPE html>
<html>
<head>
<script>
window.onload = init;

function init(){
var d = new Date();
d.setFullYear(2014);
d.setMonth(1);
d.setDate(1);

document.getElementById("demo").innerHTML = d;
}
</script>
</head>
<body>

<div id="demo"></div>

</body>
</html>

我明白了...

2014年3月1日星期六,美国中部标准时间下午3点11分03秒。

我使用的是Win7 Pro 64位操作系统,时钟和日历似乎是正确的。


4
查看这个 StackOverflow 答案 - Justin C
@Givi,真的吗?我得到了2014年3月1日星期六。 - putvande
2
反转您的 setDate 和 setMonth。 - Bic
1
@putvande 或许对我有用,因为我的时区已经是2月1日了? - Givi
1
可能是重复的问题:Date.getMonth()方法有bug吗? - Felix Kling
显示剩余4条评论
1个回答

30
今天是1月31日。 当您使用d.setMonth(1); 时,您试图将日期设置为2月31日。 由于这个日期不存在,它会跌倒到3月3日。
在初始化对象时设置整个日期,而不要逐个更改。

如果您没有指定dayValue参数,则将使用从getDate方法返回的值。 - putvande
或者您可以先设置日期以避免31天的问题:d.setFullYear(2014); d.setDate(1); d.setMonth(1); - BrettFromLA
@BrettFromLA - 当你想在二月份的28日设置1月31日时,这只会给你相反的问题。 - Quentin
@Quentin 好观点!我添加了一个答案,即在初始化对象时设置整个日期,但由于它是解决方案而不是解释,所以立即得到了2个反对票。所以我删除了它。:P - BrettFromLA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接