일정이나 예약을 등록한 날짜들을 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;
}
'Programming > php' 카테고리의 다른 글
[php] curl로 주소의 좌표값 찾기(카카오&구글) (0) | 2022.02.09 |
---|---|
[php] 아임포트 가상계좌 입금처리(webhook) (0) | 2022.02.09 |
[php에서자바스크립트사용] echo로 변수처럼 선언해도 작동하지 않을 때 (0) | 2017.02.09 |
[php] date() 함수 활용해 간단하게 달력만들기 (2) | 2017.01.12 |
[php] 날짜함수 활용 정리 (0) | 2017.01.11 |