JS 中 new Date 怎么就多一个月了?

作者:vkvi 来源:ITPOW(原创) 日期:2010-6-9

在某论坛上看到一个问题,说 JavaScript 中:

new Date(2010, 5, 31)

怎么就不是 5 月 31 日,而是 7 月 1 日。由 5 月变成了 7 月。我看有回复说是时区问题,这显然不正确,时区最多差 1 天的嘛。

我试图在论坛上注册,并回复原因,结果发现禁止新用户注册,所以写在这里了。

这种原因是由于搞错了 JavaScript 中 month 参数造成的,在 JavaScript 中,month 要比实际的月份数字小 1。也就是用 0 表示 1 月,用 1 表示 2 月……

new Date(2010, 5, 31) 实际上是指 2010 年 6 月 31 日,而 6 月不存在 31 日,这就溢出了,而 JavaScript 处理这种溢出是把溢出的往后加,也就变成了 7 月 1 日。同理 new Date(2010, 5, 32) 表示 2010 年 7 月 2 日。

ezj 中 month 是按照我们日常的习惯来设置的:用 1 表示 1 月,用 2 表示 2 月……

<script type="text/javascript" src="ezj.js"></script>
<script type="text/javascript">
<!--
alert(Date.from(2010, 5, 31)); // 2010 年 5 月 31 日
//-->
</script>
相关文章