我想知道是否有人可以帮我解决这个问题。
我有一个数组,其中包含人们希望联系的工作日。然后我创建了一个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的日期。
感谢您的光临。
答案 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
对象,getdate
,DateInterval
操作比实际需要复杂得多:
$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。