У меня есть время возврата и время проверки, у меня уже есть код для динамических c временных интервалов, но я борюсь с динамическими c интервалами. Код ниже -
$attendance = Attendance::where('user_id', '=', $request->user()->id)->latest()->first();
if(!is_null($attendance) && !is_null($attendance->checkout)){
$created = (string) $attendance->created_at;
$timing = array($created);
$main_diff = Carbon::parse($created)->diffInSeconds($attendance->checkout, false);
$modul = $main_diff % 3600;
$main_amount = $main_diff - $modul;
$count = $main_amount/3600;
if($count > 1){
for($x=0; $x <= count($timing); $x++){
$diff = Carbon::parse($timing[$x])->diffInSeconds($attendance->checkout, false);
if($diff > 0){
if($x==0){
array_push($timing, (string) Carbon::parse($timing[$x])->minute(0)->second(0)->addHour());
}
elseif($x>0 and $x<$count){
$var = Carbon::parse($timing[$x]);
array_push($timing, (string) $var->addHour());
}
elseif($x == $count){
array_push($timing, (string) $attendance->checkout);
}
}
else{
break;
}
}
$timings = [];
$last;
foreach($timing as $edit){
if(isset($last)){
$timings[] = $last.' - '.Carbon::parse($edit)->format('h:i');
}
$last = Carbon::parse($edit)->format('h:i');
}
$variable['data'] = $timings;
return response(json_encode($variable), 200);
}
}
Вывод вышеприведенного кода -
10:15-11:00
11:00-12:00
12:00-12:18
Теперь есть два разных события EventFirst, EventSecond - я хочу интегрировать время событий в Основные сроки. Например -
10:15 - 11:00
11:00 - EventFirst->start_time
EventFirst->start_time - EventFirst->end_time
EventFirst->end_time - Next Nearest Hour
Next Nearest Hour - EventSecond->start_time
EventSecond->start_time - EventSecond->end_time
EventSecond->end_time - Next Nearest Hour
Next Nearest Hour - Checkout Time
Проблема в том, что событие не является экземпляром, это коллекция, полученная из базы данных. Итак, что мне нужно сделать, это сначала взять все моменты из событий в массиве и проверить каждую итерацию.
Я не знаю человека, мой мозг готов.
Лучшее объяснение
У меня есть три таблицы, а именно -
Посещаемость, Событие Один, Событие Два
Теперь Соответствующие столбцы в каждой таблице -
Посещаемость
| ____ checkout_time (Carbon Timestamp)
| ____ созданный_at (Carbon Timestamp)
Событие 1
| ____ event_start (Carbon Timestamp)
| ____ event_duration (Int (Seconds))
Событие два
| ____ event_time (углеродная временная метка)
| ____ event_end_time (углеродная временная метка)
Что теперь является основным Требуется, чтобы в соответствии с таблицей посещаемости использовались часовые интервалы, кроме времени регистрации и проверки, поэтому формат должен быть -
checkin - Next Nearest Hour (e.g - 10:15-11:00)
Last Hour - Next Hour (e.g 11:00-12:00, 12:00-13:00, etc)
Nearest Hour Before Checkout - checkout (e.g - 18:00-18:22)
Полученные выше результаты получены.
Теперь проблема возникает, когда мне нужно добавить временные интервалы из двух других событий, в основных временных интервалах.
Так что формат теперь становится -
checkin - Nearest Hour (e.g 11:34 - 12:00)
(Assuming Event one exists)
(case 1) -
If eventOne start and end is between Nearest Hour and the Next Hour add it in between
(e.g - 12:00-12:06, **12:06-12:54**, 12:54-13:00)
(case 2) -
If eventOne end crosses the Next Hour, unset the normal interval
(e.g - 12:00-12:06, **12:06-13:28**, 13:28-14:00)
Same Goes for eventTwo
Теперь все ясно?