2011-01-20 107 views
0

我想知道是否有人可以幫助我解決這個問題。php datetime類和循環問題

我有一個數組,其中包含人們想要聯繫的工作日。然後,我創建了一個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 00:00: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

謝謝你對我的問題的詳細答案,並解釋我做錯了什麼。該代碼完全是現在應該的:) – 2011-01-20 04:28:04

1

對於一個循環將你約會必須按照提高日期符合你的條件。所以有一種方法:

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

有關進一步的代碼訪問http://urfusion.blogspot.com