0

私はコードの経験がすべてではなく、以下のコードブロックの下部に向かってwhileループで立ち往生しています

私のコードは、日付を取得し、今日が出荷しない日 (土曜、日曜、祝日) であるかどうかを確認し、そうである場合は、翌日の営業日が見つかるまで 1 日を追加します。そしてそれを書類に書きます。

var target = new Date();
var targetDay = target.getDay();
var targetDate = target.getDate();
var targetMonth = target.getMonth();

function checkIfClosedOnTarget(targetDay,targetDate,targetMonth){
    var areOpenOnTarget = true;
    if(
         targetDay == 0 || 
         targetDay == 6  ||
         (targetDate == 1 && targetMonth == 0) || // New Year's Day
         (targetMonth == 4 && targetDate >= 25 &&  targetDay == 1) || // Memorial Day
         (targetMonth == 6 && targetDate == 4) || //Independence Day
         (targetMonth == 8 && targetDate <= 7 && targetDay == 1)|| //Labor Day
         (targetMonth == 10 && targetDate <= 28 && targetDate >= 22 && targetDay == 4)|| // Thanksgiving Day
         (targetMonth == 11 && targetDate == 25)
     ){
         areOpenOnTarget = false;
     }

    if(areOpenOnTarget){
        return true;
    }else{
       return false;
    }
};

function addDaysUntilNextOpenDay() {
     while(checkIfClosedOnTarget(targetDay,targetDate,targetMonth) == false){
     target.setDate(target.getDate() + 1);
     }
 };
addDaysUntilNextOpenDay();

document.write("<p>Next shipment will ship out on " + target.getMonth() + " " +   target.getDate + ", " + target.getYear) + " at 4:00pm Pacific Standard Time ";
4

1 に答える 1

3

問題は、この行target.setDate(target.getDate() + 1);を更新することですが、変数を更新しないことです...そのため、関数targetには同じ値が渡され続け、無限ループが発生します。targetDaytargetDatetargetMonthcheckIfClosedOnTarget()

そのため、翌日を設定した後にそれらを更新することをお勧めします。

while(checkIfClosedOnTarget(targetDay,targetDate,targetMonth) === false){
     target.setDate(target.getDate() + 1);

     // update parameters
     targetDay = target.getDay();
     targetDate = target.getDate();
     targetMonth = target.getMonth();
}
于 2013-04-09T21:10:11.117 に答える