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