ホームページ  >  に質問  >  本文

PHP Laravelで期間が別の期間と重複しているかどうかを確認する方法

<p>特定の期間における特定のユーザーの勤務時間がデータベースにすでに存在するかどうかを確認する方法。したがって、勤務時間が指定された日時に重なる場合、この関数は true を返す必要があります。試してみましたが、うまくいきません。 </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) ->where(関数 ($query) use ($startDateTime, $endDateTime) { $query->where(function ($query) use ($startDateTime, $endDateTime) { // start_datetime が既存の start_datetime と end_datetime の間に重複があるかどうかを確認します $query->where(function ($query) use ($startDateTime, $endDateTime) { $query->where('start_date', '=', $startDateTime->format('Y-m-d')) ->where('start_time', '<', $endDateTime->format('H:i')) ->where('end_date', '=', $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')) ->where('end_date', '=', $startDateTime->format('Y-m-d')) ->where('end_time', '>', $startDateTime->format('H:i')); }); })->orWhere(function ($query) use ($startDateTime, $endDateTime) { // end_datetime が既存の start_datetime と end_datetime の間に重複があるかどうかを確認します $query->where(function ($query) use ($startDateTime, $endDateTime) { $query->where('start_date', '=', $endDateTime->format('Y-m-d')) ->where('end_date', '>=', $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')) ->where('end_date', '>=', $endDateTime->format('Y-m-d')); }); }); })->exists(); $overlapExists を返します。 }</pre> <p>次のデータで関数をテストすると、重複がないにもかかわらず、重複があると表示されます。 </p> <p>既存の稼働時間を確認します (1、2023-06-01、00:15、2023-06-01、03:00);</p> <p>データベース内の値は 2023-06-01 03:30 ~ 11pm です。 </p>
P粉011360903P粉011360903384日前533

全員に返信(2)返信します

  • P粉515066518

    P粉5150665182023-09-03 16:58:44

    これを使ってみてください

    リーリー

    返事
    0
  • P粉014218124

    P粉0142181242023-09-03 12:51:18

    geertjanknapen のコメントに基づく回答:

    リーリー

    返事
    0
  • キャンセル返事