>  Q&A  >  본문

PHP Laravel에서 기간이 다른 기간과 겹치는지 확인하는 방법

<p>특정 사용자의 특정 기간 동안의 근무 시간이 데이터베이스에 이미 존재하는지 확인하는 방법입니다. 따라서 근무 시간이 지정된 날짜 및 시간과 겹칠 경우 함수는 true를 반환해야 합니다. 나는 그것을 시도했지만 작동하지 않습니다. </p> <pre class="brush:php;toolbar:false;">함수 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 = 근무 시간::where('user_id', $user_id) ->where(function ($query) 사용 ($startDateTime, $endDateTime) { $query->where(함수 ($query) 사용 ($startDateTime, $endDateTime) { // start_datetime이 기존 start_datetime과 end_datetime 사이에 겹치는지 확인합니다. $query->where(함수 ($query) 사용 ($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(함수 ($query) 사용 ($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(함수 ($query) 사용 ($startDateTime, $endDateTime) { // end_datetime이 기존 start_datetime과 end_datetime 사이에 겹치는지 확인합니다. $query->where(함수 ($query) 사용 ($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(함수 ($query) 사용 ($startDateTime, $endDateTime) { $query->where('start_date', '<=', $startDateTime->format('Y-m-d')) ->where('end_date', '>=', $endDateTime->format('Y-m-d')); }); }); })->존재(); $overlapExists를 반환합니다. }</pre> <p>다음 데이터로 함수 테스트를 해보니 겹치는 부분이 없는데도 겹치는 부분이 있다고 나옵니다.</p> <p>기존 근무시간 확인(2023-06-01, 00:15, 2023-06-01, 03:00);</p> <p>데이터베이스의 값은 2023-06-01 03:30 ~ 11pm입니다. </p>
P粉011360903P粉011360903435일 전589

모든 응답(2)나는 대답할 것이다

  • P粉515066518

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

    이것을 사용해 보세요

    으아악

    회신하다
    0
  • P粉014218124

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

    geertjanknapen의 댓글을 바탕으로 한 답변:

    으아악

    회신하다
    0
  • 취소회신하다