2012年10月4日至10月5日,javascript中还有一个小时

时间:2012-10-18 19:58:14

标签: javascript date

这是我发现的。 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月

1 个答案:

答案 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个小时。