У меня различное время, как диапазоны, какподсчет часов с перекрытием времени
10:00 12:00,
21:00 24:00,
11:30 12:00,
08:00 17:00
Эти графики пользователя. Я хочу рассчитать общее количество часов с этих диапазонов, но я не хочу вычислять повторяющееся время. Если я вычислил любой час один раз, то я не хочу снова это вычислять. Что я должен сделать для этого.
Я вычисляю часы этим. но как я мог избежать повторного времени. которые я уже посчитал.
$shifts = "10:00 12:00 | 21:00 24:00| 11:30 12:00|08:00 17:00";
$shifts = explode('|', $shifts);
$sum = 0;
$starts = array();
$ends = array();
foreach($shifts as $shift) {
$times = explode(' ', trim($shift));
$start = explode(':', $times[0]);
$end = explode(':', $times[1]);
$startime = $start[0]*60 + $start[1];
$endtime = $end[0]*60 + $end[1];
$flag = false;
foreach ($starts as $key=>$start) {
if($startime < $start && $endtime > $ends[$key]) {
$diff_old = ($start > $ends[$key]) ? $start - $ends[$key] : $ends[$key] - $start;
$sum = $sum - $diff_old/60;
}
else if($startime > $start && $endtime <= $ends[$key]) {
$flag = true;
continue;
}
}
if($flag)
continue;
$starts[] = $startime;
$ends[] = $endtime;
$diff = $startime > $endtime ? $startime - $endtime : $endtime - $startime;
$sum = $sum + $diff/60;
}
echo $sum;
Я пытаюсь использовать этот код выше, но отображается неправильный ответ. потому что я не хочу вычислять часы, которые уже рассчитаны. на этот раз это ответ 12, но правильный ответ - 10.
Возможный дубликат [Самая короткая логика для вычисления часов с перекрытого времени php] (http://stackoverflow.com/questions/25846678/shortest-logic-to-calculate-hours-from-overlapped-time-php) –
Проблема OP не получила решения раньше, поэтому его точка не ссылается на него. Я думаю. – light94
Я опубликовал это ранее, но пока не нашел решения. Поэтому я ищу хороший ответ. Пожалуйста, предоставьте любую помощь. –