Php - разделить период времени на равные интервалы - PullRequest
0 голосов
/ 27 декабря 2010

Мне нужно создать функцию, которая получает 5 параметров, представляющих информацию о рабочем времени какого-либо отдела.
- когда начинается / заканчивается работа,
- когда начинается / заканчивается обеденное время (или любой другой перерыв),
- целое число, представляющее минуты на то, на какие маленькие кусочки мы должны разделить период времени.

Кроме того - возможно, что в рабочем времени нет перерывов.

Функция должна возвращать все интервалы из рабочего времени.

function split_time_into_intervals($work_starts,$work_ends,$break_starts=null;
          $break_ends=null,$minutes_per_interval=60)
{
    $intervals=array();

    //all of the function code
    return $intervals;
}

Так что, если у меня естьследующие параметры для функции

function split_time_into_intervals("8:30","14:50","11:45", "12:25");

Я хотел бы получить следующий массив:

$intervals[0]['starts']="8:30";
$intervals[0]['ends']="9:30";
$intervals[1]['starts']="9:30";
$intervals[1]['ends']="10:30";
$intervals[2]['starts']="10:30";
$intervals[2]['ends']="11:30";
$intervals[3]['starts']="11:30";
$intervals[3]['ends']="11:45";

//this interval was smaller than 60 minutes - because of the break (which starts at 11:45)
$intervals[4]['starts']="12:25";//starts when the break ends
$intervals[4]['ends']="13:25"; // interval is again 60 minutes
$intervals[5]['starts']="13:25";
$intervals[5]['ends']="14:25";
$intervals[6]['starts']="14:25";
$intervals[6]['ends']="14:50";

//this period is shorter than 60 minutes - because work ends 

Любые советы?Я бы уточнил любой php (или C #) код, касающийся этой проблемы!

Ответы [ 2 ]

0 голосов
/ 27 декабря 2010

Наконец я решаю свою проблему!Спасибо, Таркун за интерес!В данный момент все работает так, как я хочу!Я предполагаю, что в некоторых случаях эта функция может работать с некоторыми ошибками, поэтому я хотел бы знать, появляются ли они.На данный момент здесь две функции.Извините, если бы это можно было написать короче и более оптимизировано, но, по крайней мере, это работает!

0 голосов
/ 27 декабря 2010

Ну, это может быть немного неэффективно, но вы можете попробовать это (я не проверял это, и в нем могли быть некоторые ошибки, но это должно работать примерно так:

$time = $work_starts;

while($time < $work_ends)
{
     if( ($break_starts !== null) && ($time + 60 <= $break_starts) )
     {
         $intervals[] = array( 'starts' => $time, 'ends' => ($time += 60) );
     }
     else if( $break_starts !== null ) 
     {
         $time = $break_ends;
     }
     else if( $time + 60 <= $work_ends )
     {
         $intervals[] = array( 'starts' => $time, 'ends' => ($time += 60) );
     }
 }

конечно, $time += 60 должно быть переведено в фактическое добавление минут. Это псевдоалгоритм.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...