为什么以下代码中的两个日期都具有相同的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;
我们可以看到两个值都是等于。
如果用户尝试超过31天的间隔,我想获取用于锁定用户的值。
但是,当用户将开始Date(2014,10,01)
和结束Date(2014,11,1)
置于j {'}}时,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>
&#13;
为什么这些值会相同,即使提供的日期不同?
答案 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开始的)。