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

时间:2014-10-24 18:54:01

标签: 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>
&#13;
&#13;
&#13;

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

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

&#13;
&#13;
<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>
&#13;
&#13;
&#13;

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

1 个答案:

答案 0 :(得分:8)

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

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

MDN documentation中的大黄色框:

  

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