2012-05-09 7 views
0

私が達成しようとしているのは、毎週火曜日の&木曜日です。注文が月曜日の午後5時以降にある場合は、金曜日まで待つ必要があります。そして、木曜日の午後5時以降の注文の場合、火曜日まで待つ必要があります。指定した時間が納品日に追加された場合

function freeDelivery($date){ 
    $holidays = array("05/30/2012","07/04/2012","09/05/2012","11/24/2012","11/25/2012","12/25/2012","12/31/2012","01/01/2013","05/28/2013","07/04/2013","09/03/2013","11/22/2013","11/23/2013","12/25/2013"); 
    $checkday = strtotime($date); 
    // check if it's a holiday 
    while(in_array(date("m/d/Y",$checkday), $holidays)) { 
     $checkday = strtotime(date("m/d/Y",$checkday)." +1 day"); 
    } 

    //sun 
    if (date("w",$checkday) == 0) { 
     $checkday = strtotime(date("m/d/Y",$checkday)." +2 day"); 
    } 
    //mon 
    elseif (date("w",$checkday) == 1) { 
     $checkday = strtotime(date("m/d/Y",$checkday)." +1 days"); 
    } 
    //tue 
    elseif(date("w",$checkday) == 2) { 
     $checkday = strtotime(date("m/d/Y",$checkday)." +2 days"); 
    } 
    //wen 
    elseif (date("w",$checkday) == 3) { 
     $checkday = strtotime(date("m/d/Y",$checkday)." +1 days"); 
    } 
    //thur 
    elseif (date("w",$checkday) == 4) { 
     $checkday = strtotime(date("m/d/Y",$checkday)." +5 days"); 
    } 
    //fri 
    elseif (date("w",$checkday) == 5) { 
     $checkday = strtotime(date("m/d/Y",$checkday)." +4 days"); 
    } 
    //sat 
    elseif (date("w",$checkday) == 6) { 
     $checkday = strtotime(date("m/d/Y",$checkday)." +3 days"); 
    } 

    // make sure it's not another holiday 
    while(in_array(date("m/d/Y",$checkday), $holidays)) { 
     $checkday = strtotime(date("m/d/Y",$checkday)." +1 day"); 
    } 
    return $checkday; 
} 

上記のコードは、週の日付によって出荷日を決定するために使用されています。

ご協力いただきありがとうございます。あなたは月曜日に5P後のものと仮定すると、

+0

ご質問はありますか? – Hamish

+0

スクリプトStormをどのようにエコーしましたか? –

答えて

3

は木曜日あり、その後、水曜日上5Pした後、あなたは火曜日意味...以下試してください。 最も簡単な方法は、ちょうどあなたを追加することです

編集をコードを関数に戻します。

function freeDelivery($date){ 
    $holidays = array("05/30/2012","07/04/2012","09/05/2012","11/24/2012","11/25/2012","12/25/2012","12/31/2012","01/01/2013","05/28/2013","07/04/2013","09/03/2013","11/22/2013","11/23/2013","12/25/2013"); 
    $checkday = strtotime($date); 
    // check if it's a holiday 
    while(in_array(date("m/d/Y",$checkday), $holidays)) { 
     $checkday = strtotime(date("m/d/Y",$checkday)." +1 day"); 
    } 

    $thedate = date("m/d/Y",$checkday); 
    $dayofweek = date("w",$checkday); 
    $dayincrease = array(0 => 2, 1 => 1, 2 => 2, 3 => 1, 4 => 5, 5 => 4, 6 => 3); 
    $after5 = (date("G",$checkday) >= 17); 

    $increase = ""; 
    if($after5 && $dayofweek == 1) { 
     // monday after 5p = thurs 
     $increase = "+3 days"; 
    } elseif($after5 && $dayofweek == 3) { 
     // wednesday after 5p = tues 
     $increase = "+6 days"; 
    } else { 
     $increase = "+" . $dayincrease[$dayofweek] . " days"; 
    } 
    $checkday = strtotime($thedate." ".$increase); 

    // make sure it's not another holiday 
    while(in_array(date("m/d/Y",$checkday), $holidays)) { 
     $checkday = strtotime(date("m/d/Y",$checkday)." +1 day"); 
    } 
    return $checkday; 
} 
+0

ミスタイプについては申し訳ありませんが、これは完璧に動作します。どうすれば私の配列を休日に追加することができますか?ありがとうございました。 – st0rm

+0

これをECHOとしてどのように返すのですか? <?php echo $ checkday? –

+0

@bybeはい、 'return $ checkday;'を 'echo $ checkday;'に変更するか、関数呼び出しを変数に代入してエコーします。 '$ var = freeDelivery($ date); echo $ var; ' –

関連する問題