PHP Datetime класс и для проблемы цикла - PullRequest
0 голосов
/ 20 января 2011

Мне было интересно, может ли кто-нибудь помочь мне с этой проблемой.

У меня есть массив, который содержит дни недели, в которые люди хотят связаться. Затем я создал цикл 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 ]

1 голос
/ 17 августа 2011

Для применения даты в цикле вы должны увеличить дату в соответствии с вашим состоянием. Так что есть способ:

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

Для дальнейшего посещения кода http://urfusion.blogspot.com.

1 голос
/ 20 января 2011

Ваш 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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...