2011-01-20 12 views
0

誰かが私が持っているこの問題を手助けできるかどうか疑問に思っていました。php datetimeクラスとforループの問題

私は、人々が連絡したい平日を含む配列を持っています。私はその後、forループを作成して、現在の日付に1日を追加し、曜日が連​​絡したい日に一致するまで続けます。

私が抱えている問題は、ループがいつも遠すぎるということです。私はこれが私がやろうとしていることを達成する最善の方法であるか、それともより良い方法があるのだろうかと疑問に思っています。ここで

は私のコードです:

$ScheduleWindow = array('Monday', 'Tuesday'); 

$date = new DateTime('today'); 

$dow = getdate($date->getTimestamp()); 

for($date, $dow;!in_array($dow['weekday'], $ScheduleWindow);$date->add(new DateInterval('P1D'))){ 
$dow = getdate($date->getTimestamp()); 
} 

echo "Next date to contact is" . $date->format('Y-m-d H:i:s') . "\n"; 

コードは現在、しかし、私はそれが日付である必要があり、「is2011-01-25夜12時〇〇分00秒スケジュールウィンドウで次の日付を」エコー2011-01-24 。

ありがとうございます。

答えて

1

あなたforループは言葉で表現は、この処理を行います。あなたは次のループ上の非増加の日付に対してチェックしている

If the weekday in $dow is not within schedule window, 
assign the current date to $dow, 
increase the date, 
repeat. 

ループも非常に複雑です。これがうまく実行する必要があります。

while (!in_array($dow['weekday'], $ScheduleWindow)) { 
    $date->add(new DateInterval('P1D')); 
    $dow = getdate($date->getTimestamp()); 
} 

あなたDateTimeオブジェクト、getdateDateInterval操作ははるかに複雑であることが必要以上:

$scheduleWindow = array('Monday', 'Tuesday'); 

$date = new DateTime('today'); 
while (!in_array($date->format('l'), $scheduleWindow)) { 
    $date->add(new DateInterval('P1D')); 
} 

echo "Next date to contact is " . $date->format('Y-m-d H:i:s'); 
+0

私の質問への詳細な回答と、間違っていたことを正確に説明していただきありがとうございます。コードは、それが今になっているものを正確に行います:) –

1

ループ内で日付を適用するために、あなたが応じて日付を増やす必要がありますあなたの状態に。だから方法があります:

$date = date ("Y-m-d", strtotime ("+1 day", strtotime($date))); 

さらにコードを訪問http://urfusion.blogspot.com