Старею. Время выполнения с графиком работы

Тема в разделе "Как сделать...", создана пользователем Горбушка, 6 авг 2014.

  1. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.175
    Симпатии:
    2.195
    Всем привет.
    Есть задача - расчитать дедлайн объекта с привязкой к рабочему расписанию сотрудника...
    К примеру, человек работает с 9 до 18 пн-пт. В пятницу в 16:00 ему приходит некое письмо, на которое он должен ответить за 5 часов. Необходимо проставить дедлайн пн 13:00 - 1 час списан зс пятницу - остаётся ещё 4, го работает он только в пн.
    Проблема в том, что некоторые работают 24/7, некоторые 5/2 с 9 до 18, кто-то с 10 до 17, а кто-то сутеи/трое... Ну и т.д.

    Как реализовать с наименьшей нагрузкой?
     
  2. SimonSmith

    SimonSmith Постоялец

    Регистр.:
    25 сен 2008
    Сообщения:
    148
    Симпатии:
    33
    Здравствуйте, так же интересует данный вопрос. Были сделаны наброски, но не до конца.
    Код:
    $iHours = 60 * 60 * 10;
    echo 'Priority: '.gmdate('H:i:s',$iHours);
    
    $sEventStartTime = '2014-10-06 10:00:00';
    echo '<br/>Ticket created at: '.$sEventStartTime;
    
    $sCurrentDate = time();
    echo '<br/>Current time: '.date('d-m-y H:i:s',$sCurrentDate);
    
    $startWorkHour = date('d-m-Y').' 8:00:00';
    $endWorkHour = date('d-m-Y').' 17:00:00';
    
    $breakStart = date('d-m-Y').' 12:00:00';
    $breakEnd = date('d-m-Y').' 13:00:00';
    
    $sEndTime = strtotime($sEventStartTime) + $iHours;
    echo '<br/><br/>End time to resolve: '.date('d-m-y H:i:s',$sEndTime);
    
    if($sEndTime > $sCurrentDate) {
    $interval =  $sEndTime - $sCurrentDate;
    if($sCurrentDate > $breakStart and $sCurrentDate < $breakEnd){
      $interval = $interval * 60;
    }
    echo '<br/>Remaining: '.gmdate('H:i:s',$interval);
    }