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



为什么下面代码中的两个日期具有相同的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>

我们可以看到这两个值是相等的。

如果用户尝试的时间间隔大于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>

尽管提供的日期不同,但为什么这些值会相同?

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

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

来自MDN文档:中的黄色大框

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

最新更新