php datetime类和for循环问题

时间:2011-01-20 03:38:50

标签: php date

我想知道是否有人可以帮我解决这个问题。

我有一个数组,其中包含人们希望联系的工作日。然后我创建了一个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";

该代码目前回应“日程安排窗口中的下一个日期是2011-01-25 00:00:00”,但我需要它是2011-01-24的日期。

感谢您的光临。

2 个答案:

答案 0 :(得分: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');

答案 1 :(得分:1)

要在循环中应用日期,您必须根据条件增加日期。所以有一种方法:

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

有关更多代码,请访问http://urfusion.blogspot.com