Bagaimana untuk menyemak sama ada tempoh masa bertindih dengan tempoh masa lain dalam PHP Laravel
<p>Bagaimana untuk menyemak sama ada waktu bekerja pengguna tertentu untuk tempoh masa tertentu sudah wujud dalam pangkalan data. Oleh itu, fungsi harus kembali benar apabila waktu bekerja bertindih dengan tarikh dan masa yang diberikan. Saya mencubanya tetapi tidak berkesan. </p>
<pre class="brush:php;toolbar:false;">function checkExistingWorkingHours($user_id, $start_date, $start_time, $end_date, $end_time)
{
// dd($user_id . " " . $start_date . " " . $start_time . " " . $end_date . " " . $end_time);
$startDateTime = Carbon::parse($start_date . ' ' . $start_time);
$endDateTime = Carbon::parse($end_date . ' ' . $end_time);
$overlapExists = WorkingHour::where('user_id', $user_id)
->di mana(fungsi ($pertanyaan) gunakan ($startDateTime, $endDateTime) {
$query->where(function ($query) use ($startDateTime, $endDateTime) {
// Semak pertindihan di mana start_datetime adalah antara start_datetime dan end_datetime sedia ada
$query->where(function ($query) use ($startDateTime, $endDateTime) {
$query->where('start_date', '=', $startDateTime->format('Y-m-d'))
->di mana('start_time', '<', $endDateTime->format('H:i'))
->di mana('tarikh_akhir', '=', $startDateTime->format('Y-m-d'))
->where('end_time', '>', $startDateTime->format('H:i'));
})->orWhere(function ($query) use ($startDateTime, $endDateTime) {
$query->where('start_date', '<', $startDateTime->format('Y-m-d'))
->di mana('tarikh_akhir', '=', $startDateTime->format('Y-m-d'))
->where('end_time', '>', $startDateTime->format('H:i'));
});
})->orWhere(function ($query) use ($startDateTime, $endDateTime) {
// Semak pertindihan di mana end_datetime adalah antara start_datetime sedia ada dan end_datetime
$query->where(function ($query) use ($startDateTime, $endDateTime) {
$query->where('start_date', '=', $endDateTime->format('Y-m-d'))
->di mana('tarikh_akhir', '>=', $endDateTime->format('Y-m-d'))
->where('start_time', '<', $endDateTime->format('H:i'));
})->orWhere(function ($query) use ($startDateTime, $endDateTime) {
$query->where('start_date', '<=', $startDateTime->format('Y-m-d'))
->di mana('tarikh_akhir', '>=', $endDateTime->format('Y-m-d'));
});
});
})->wujud();
pulangkan $overlapExists;
}</pre>
<p>Apabila saya menguji fungsi dengan data berikut, ia mengatakan terdapat pertindihan walaupun tiada pertindihan.</p>
<p>Semak waktu kerja sedia ada (1, 2023-06-01, 00:15, 2023-06-01, 03:00);</p>
<p>Nilai dalam pangkalan data ialah 2023-06-01 03:30 hingga 11 malam. </p>