Bagaimana untuk menyemak sama ada tempoh masa bertindih dengan tempoh masa lain dalam PHP Laravel
P粉011360903
P粉011360903 2023-09-03 00:18:11
0
2
649
<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>
P粉011360903
P粉011360903

membalas semua(2)
P粉515066518

Cuba guna ini

$start = Carbon::parse($start_date . ' ' . $start_time)->stratOfDay();
$end = Carbon::parse($end_date . ' ' . $end_time)->endOfDay();
$overlapExists = WorkingHour::where('user_id', $user_id)->whereBetween('your column',[$start , $end])->exists();
P粉014218124

Jawapan berdasarkan komen geertjanknapen:

$period = CarbonPeriod::create("$start_date $start_time", "$end_date $end_time");
$start = Carbon::create("$to_check->start_date $to_check->start_time");
$end = Carbon::create("$to_check->end_date $to_check->end_time");


if ($period->overlaps($start, $end)) {
    return redirect()->back()->withInput()->with('error',"Time is overlapping!");
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan