2

这是我发现的。2012 年 10 月 4 日午夜至 10 月 5 日午夜有 25 个小时。也许在世界的某个地方有一个我不知道的dst?

当您调用 javascripts innate getTime: -in IE 和 Mozilla 时。- 这仍然在客户端。一天通常有 86400 秒,10 月 5 日和 4 日之间的差异甚至是 90000 (额外一小时)-仅 2012 失败。-> 2011 年 7 月 5 日 – 2011 年 5 月 10 日有效……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 月

4

1 回答 1

4

在 JavaScript 中,月份的编号是从0(一月)到11(十二月)——参见MDN 页面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,时钟被设置回凌晨1:00。所以那一天实际上是25个小时。

于 2012-10-18T20:02:21.140 回答