[php] 데이터가 있는 날짜만 select하고 그 사이의 날짜 반환하기(date...

[php] 데이터가 있는 날짜만 select하고 그 사이의 날짜 반환하기(date...

일정이나 예약을 등록한 날짜들을 mysql에서 select하고 1박2일 이상일 때 예약이 되어있는 날짜를 리턴하는 함수

(ex.2022년 1월3일부터 1월8일까지->5박6일/ 2022년 1월20일부터 1월22일까지->2박3일 예약되어있을때,

2022년 1월의 예약된 날짜(또는 예약이 불가능한) 모두 리턴하기)

//일정중 스케줄 데이터가 있는 날짜만 리턴하기 function getScheduleDay($this_mon=''){ global $DB; $re_arr = array(); //지정한 년/월이 없으면 현재의 년/월로 지정해주기 if($this_mon=='') $this_mon = date("Y-m"); $query = "select group_concat(s_date) as s_scd, group_concat(e_date) as e_scd from calendar_tbl where instr(s_date, '{$this_mon}') order by s_date"; $scd = $DB->fetch_query($query); if($scd['s_scd']!='') { $scd_s = explode(",", $scd['s_scd']); $scd_e = explode(",", $scd['e_scd']); $no_arr = array(); for ($n = 0; $n < count($scd_s); $n++) { $no_arr[] = getDaysArray($scd_s[$n], $scd_e[$n], $this_mon); } for ($i = 0; $i < count($no_arr); $i++) { for ($k = 0; $k < count($no_arr[$i]); $k++) { $re_arr[] = $no_arr[$i][$k]; } } sort($re_arr); } return $re_arr; } //기간 시작일과 종료일 입력하면 그 사이의 날짜 리턴 function getDaysArray($sdate, $edate, $this_mon){ $array_days = array(); $dt_sdate = new DateTime($sdate); $dt_edate = new DateTime($edate); $dt_lastday = new DateTime(date($this_mon.'-t')); //해당월의 마지막 날과 기간시작일 사이의 간격 $diff = date_diff($dt_sdate, $dt_lastday); $date_interval_sdate_ldate = ($diff->days); //해당월의 마지막 날과 기간종료일 사이의 간격 $diff_edate = date_diff($dt_edate, $dt_lastday); $date_interval_edate_ldate = $diff_edate->days; //마지막 날짜를 기준으로 시작일과의 간격~종료일과의 간격까지 하루씩 마이너스 시켜서 날짜(d)만 배열에 푸시 for($i=$date_interval_sdate_ldate; $i>=$date_interval_edate_ldate; $i--){ array_push($array_days, date('d', strtotime(date($this_mon.'-t').' -'.$i.' days'))); } return $array_days; }

from http://lovelydoll.tistory.com/76 by ccl(A) rewrite - 2021-12-27 18:26:35