0

2つの日付の差を計算して整数で表示する必要がありますが、2つの日付の間に大量の日付(26を超える)がある場合、および「31日」の日付がある場合、以下のコードでエラーが発生します。 2つの日付の間の1か月。

私のコードの何が問題なのかわかりません...?

'ires_sakuma_datums'との値は'ires_beigu_datums'jqueryカレンダーピッカーによって設定され、それぞれなどの形式で表示され25-08-201217-09-2012結果はidに表示されます。'dienu_skaits'

'ires_sakuma_datums'はに設定され28-08-2012'ires_beigu_datums'に設定され29-09-2012、結果は次の31.041666666666668ようになります。32

   function getDays()
    {
        var x = document.getElementById('ires_sakuma_datums').value;
        var y = document.getElementById('ires_beigu_datums').value;

        //assuming that the delimiter for dt time picker is a '-'.
        var arr1 = x.split('-');
        var arr2 = y.split('-');
        var dt1 = new Date();
        dt1.setFullYear(arr1[2], arr1[1], arr1[0]);
        var dt2 = new Date();
        dt2.setFullYear(arr2[2], arr2[1], arr2[0]);

        document.getElementById('dienu_skaits').value = (dt2.valueOf() - dt1.valueOf()) / (60 * 60 * 24 * 1000);

document.forms['test'].elements['dienu_skaits'].focus();
    }
4

1 に答える 1

0

問題は、渡される月Dateが 0 ベースであるため、月から 1 を引く必要があることです。http://jsfiddle.net/qB9V3/5/28-08-2012したがって、との比較29-09-2012は実際には diffing28-09-201229-10-2012

したがって、コードを次のように変更する必要があります

    var arr1 = x.split('-');
    var arr2 = y.split('-');
    var dt1 = new Date();
    dt1.setFullYear(arr1[2], parseInt(arr1[1],10) -1, arr1[0]);
    var dt2 = new Date();
    dt2.setFullYear(arr2[2], parseInt(arr2[1],10) - 1, arr2[0]);

日付が夏時間の変更をまたぐ場合、その間の日数は偶数にならないので、結果を四捨五入する必要があることに注意してください

document.getElementById('dienu_skaits').value = Math.round( 
    (dt2 - dt1) / (60 * 60 * 24 * 1000) 
);
于 2012-08-22T20:18:55.330 に答える