这是我发现的。 2012年10月4日午夜至10月5日午夜有25个小时。 也许在世界的某些地方有一个我不知道的事情?
当你调用javascripts innate getTime时: - 在IE和Mozilla中。 - 这仍然在客户端。 一天通常有86400秒,10月5日和4日之间的差异是90000甚至(一小时) - 仅在2012年失败。 - > 07/05/2011 - 10/05/2011有效... 2012年没有。 -07/04/2012 - 10/04/2012有效。
这是代码的摘录。元素是格式为“mm / dd / yyyy”的字符串
var fromDateElement = document.getElementById("filterFromDate");
var toDateElement = document.getElementById("filterToDate");
if (fromDateElement == null || fromDateElement.value == ""
|| toDateElement == null || toDateElement.value == "") {
alert(dojoCallGetLocalizedMessage("please.enter.filter.dates"));
return false;
}
var fromArr = fromDateElement.value.split("/");
var toArr = toDateElement.value.split("/");
var timeSpread = (new Date(toArr[2],toArr[0],toArr[1]).getTime()) -
(new Date(fromArr[2],fromArr[0],fromArr[1]).getTime());
if (timeSpread > <%= ONE_DAY_IN_MILLIS %>) {
alert(dojoCallGetLocalizedMessage("not.a.day"));
return false;
}
return true;
(毫秒中的一天设定为864000000) 此外,还有逻辑可以采用dst而不是10月
答案 0 :(得分:4)
在JavaScript中,月份的编号从0
(1月)到11
(12月) - 请参阅the MDN page for Date
- 所以月份#10
是11月,而不是10月。您需要从月份数中减去1
:
var timeSpread = (new Date(toArr[2],toArr[0]-1,toArr[1]).getTime()) -
(new Date(fromArr[2],fromArr[0]-1,fromArr[1]).getTime());
为了任何非美国读者的利益而编辑添加:2012年11月4日,美国大部分地区将从夏令时“退回”:否则将是2 :00:00,时钟回到凌晨1点。所以那天实际上是25个小时。