3

質問によると、指定された日数に基づいて将来の日付を見つけたいと思います。配列として格納されている週末と休日を除外する必要があります。このコードを以下に示しますが、機能しません。

        var holiday = [];
        holiday[0] = new Date(2013, 11, 12);
        holiday[1] = new Date(2013, 11, 13);

        var startDate = new Date();
        var endDate = "", noOfDaysToAdd = 13, count = 0;
        while (count < noOfDaysToAdd) {
            endDate = new Date(startDate.setDate(startDate.getDate() + 1));
            if (endDate.getDay() != 0 && endDate.getDay() != 6) {
                // Date.getDay() gives weekday starting from 0(Sunday) to
                // 6(Saturday)
                for ( var i = 0; i < holiday.length; i++) {
                    if (endDate != holiday[i]) { //If days are not holidays
                        count++;
                    }
                }
            }
        }
        alert(endDate);
4

5 に答える 5

0

ループを実行し、番号を数えます。開始日から終了日までの休日。このカウントを noOfDaysToAdd に追加し、この値を開始日に追加して最終日を取得します。

編集:

ロジックから 2 つのことを修正する必要があります。

1) 日付の比較が正しくありません。休日の日付を作成すると、日付、月、年が渡されます。new Date() を実行すると、時刻とともに日付も取得されます。これらの日付の両方に注意を払い、違いを確認してください。この違いにより、日付の比較は常に不一致になります。

2)もう1つの問題は、forループにカウント値を追加していることです。そのため、日付ごとに、カウント値が no ずつインクリメントされます。あなたの休日の配列にある休日の。これも修正する必要があります。

于 2013-11-06T05:17:02.147 に答える
0
var holiday = [];
    holiday[0] = new Date(2013, 10, 12);//remember that month is 0 to 11
    holiday[1] = new Date(2013, 10, 13);//remember that month is 0 to 11
    var startDate = new Date();
    var endDate = new Date(), noOfDaysToAdd = 13, count = 0;
    while (count < noOfDaysToAdd) {
        endDate.setDate(endDate.getDate()+1)
        // Date.getDay() gives weekday starting from 0(Sunday) to
        // 6(Saturday)
        if (endDate.getDay() != 0 && endDate.getDay() != 6 && !isHoliday(endDate,   holiday)) {
            count++;
        }
    }
function isHoliday(dt, arr){
var bln = false;
for ( var i = 0; i < arr.length; i++) {
    if (compare(dt, arr[i])) { //If days are not holidays
        bln = true;
        break;
    }
}
return bln;
}
function compare(dt1, dt2){
var equal = false;
if(dt1.getDate() == dt2.getDate() && dt1.getMonth() == dt2.getMonth() && dt1.getFullYear() == dt2.getFullYear()) {
    equal = true;
}
return equal;
}
    alert(endDate);
于 2013-11-21T07:02:27.580 に答える
0

あなたの場合、 for ループは毎回2回実行され、実行され、翌日が事前定義された配列にない場合、カウントに1が追加されるため、わずか7営業日後にルーチンが終了し、間違った日付が表示されます。休日を追加すると、さらに多くのことを逃すことになります。

于 2013-11-05T13:01:00.223 に答える