为什么日期2014年10月31日和2014年11月01日使用日期对象在Javascript中具有相同的值?

JmL*_*ier 4 javascript date

为什么在下面的代码两个日期都相同valueOf(),并getTime()

<script>
var endDt = new Date(2014,10,31);
var endDt2 = new Date(2014,11,1);
alert("getTime()\nendDt : "+endDt.getTime()+"\nendDt2: "+endDt2.getTime());
alert("valueOf()\nendDt : "+endDt.valueOf()+"\nendDt2: "+endDt2.valueOf());
</script>
Run Code Online (Sandbox Code Playgroud)

我们可以看到两个值都是等于的.

如果用户尝试超过31天的间隔,我想获取用于锁定用户的值.但是当用户将开始Date(2014,10,01)和结束时Date(2014,11,1)javascript解释为结束时Date(2014,10,31).当我做计算.如果开始日期和结束日期之间存在差异,则两个值都相同.

<script>
var startDt = new Date(2014,10,01);
var endDt 	= new Date(2014,10,31);
var endDt2 	= new Date(2014,11,1);
  
var diff  = endDt.getTime()-startDt.getTime();
var diff2 = endDt2.getTime()-startDt.getTime();

alert("getTime()\ndiff: "+diff+"\ndiff2: "+diff2);
  
diff  = endDt.valueOf()-startDt.valueOf();
diff2 = endDt2.valueOf()-startDt.valueOf();

alert("valueOf()\ndiff: "+diff+"\ndiff2: "+diff2);
</script>
Run Code Online (Sandbox Code Playgroud)

即使提供的日期不同,为什么这些值会相同?

Fel*_*ing 8

您正在创建错误的日期.JavaScript的月份是0,因此new Date(2014,10,31);(理论上)是11月31日,new Date(2014,11,1)也就是12月1日.

当然11月31日不存在,所以12月1日是正确的.

MDN文档中的大黄色框中:

注意:在Date具有多个参数的构造函数中,如果值大于其逻辑范围(例如13,以月值或70分钟值提供),则将调整相邻值.Eg new Date(2013, 13, 1)相当于new Date(2014, 1, 1),都创建了一个日期2014-02-01(注意月份是从0开始的).