2

これが私が発見したものです。2012 年は 10 月 4 日の深夜から 10 月 5 日の深夜まで 25 時間あります。世界のどこかには、私が知らない dst があるのではないでしょうか?

javascripts innate getTime: を呼び出すとき - IE と Mozilla の両方で。- これはまだクライアント側にあります。通常、1 日は 86400 秒で、10 月 5 日と 4 日の差は 90000 です (さらに 1 時間) - 2012 でのみ失敗します。-> 07/05/2011 – 10/05/2011 動作します...2012 動作しません。-2012 年 7 月 4 日 – 2012 年 4 月 10 日動作します。

これはコードの抜粋です。要素は「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;

(ミリ秒単位の 1 日は 864000000 に設定されます) さらに、10 月ではなく dst を取得するロジックがあります。

4

1 に答える 1

4

JavaScript では、月は0(1 月) から11(12月) までの番号が付けられます — MDN のページを参照してくださいDate— そのため、月 #10は 10 月ではなく 11 月です。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 日、米国のほとんどの地域が夏時間から「フォールバック」します。午前 1 時。つまり、その日は実際には 25 時間の長さです。

于 2012-10-18T20:02:21.140 に答える