2015-08-05 3 views
0

У меня есть функция расписания дат в PHP, которая предназначена для выполнения только в рабочие дни. Код, который у меня есть на данный момент, составляет график для всех дней недели, поэтому оператор while не работает, и я не уверен, почему.Создать расписание дат, которое выполняется только по будням

Я студент, поэтому я не очень разбираюсь в таких вещах. Вот код, который я до сих пор:

public static function generate_date_schedule($tasksperdayschedule, $startdate) { 
    $schedule = []; 

    $date = clone $startdate; 

    foreach ($tasksperdayschedule as $numberoftasks) { 
     $day = (int)$date->format('N'); 

     // Skip weekend days. 
     while ($day > 5) { 
      $date->add(new DateInterval('P1D')); 
      $day = (int)$date->format('N'); 
     } 

     $schedule[$date->format(self::DATE_FORMAT)] = $numberoftasks; 

     $date->add(new DateInterval('P1D')); 
    } 

    return $schedule; 

Это, вероятно, что-то очень мало, мне не хватает, но любая помощь будет оценен по достоинству! Спасибо

+0

я проверил это, и это, кажется, работает хорошо, и пропуск в выходные дни. Можете ли вы объяснить, какие входные и выходные данные вы ожидаете? –

+0

Это небольшая часть гораздо большей базы кода, возможно, проблема заключается не в этой функции, а в другом месте. Ожидается, что он создаст расписание, которое затем передается в другом месте для отправки уведомлений. – Ryan

ответ

1

Я думаю, что это простая логическая ошибка.

Внутри цикла while вы обновляете $day, но цикл foreach продолжает выполнять остальную часть кода.

еще лучше, вы можете избежать while петли по:

if($day > 5) 
    continue; 
+0

Я дам вам выстрел и вернусь к вам! Благодаря! – Ryan

+0

Просто, чтобы быть ясным, если я сделаю это, используя «continue», нижняя часть цикла foreach не будет выполнена, если день равен> 5 - правильно? – Ryan

+0

Продолжение продолжит цикл while, а не внешний foreach. Итак, где у меня это, он ничего не делает. – Ryan

Смежные вопросы