공휴일 체크 sql 질문입니다.
본문
1. 공휴일 데이터를 가져옵니다.
$holy_data = "select * from holydata";
$holy = ['2021-01-06','2021-01-07','2021-01-08'];
2. 비교할 데이터(2021-01-06)을 넣어서 공휴일에 해당하면 +1일을 합니다.
$chkDate = '2021-01-06';
foreach ($holy as $key => $row) {
if ($chkDate == $row['HOLIDAY']) {
// 공휴일이라면 ON
$timestamp = strtotime($chkDate." +1 days");
$return_date = date("Y-m-d", $timestamp);
}
}
4. 결과가 주말에 해당한다면 토요일은 +2일 일요일이라면 +1일을 하여 평일로 바꿉니다.
제가 원하는 결과는 2021-01-11입니다.
왜냐하면 6일부터 8일은 임의로 설정한 공휴일이고 9일부터 10일은 주말에 해당하기 때문입니다..
근데 결과는 2021-01-07일로 나옵니다.. 코드를 봐선 당연히 7일로 나와야하는데
어떻게하면 8일까치 체크하게 할수 잇을까요?
도움좀 부탁드립니다.
!-->!-->
답변 4
2021-01-11
=> 휴무일이라면 다음주 월요일이 나온다는건가요?
=> 설명상으로 왜 해당 날짜가 나온다는 이유가 안 보이네요.
// 공휴일이라면 1일 추가
$is_holy = 1;
$day_plus = 7 - $chkDateYoil + 1;
$timestamp = strtotime($chkDate." +".$day_plus." days");
$return_date = date("Y-m-d", $timestamp);
=> 공휴일 부분을 이렇게 고치시면 될거 같네요.
<?php
$holy = ['2021-01-06','2021-01-07','2021-01-08'];
$chkDate = '2021-01-02'; // 토요일
$chkDateReturn = get_date($chkDate);
echo "토요일 : ".$chkDate."<br />";
echo "토요일 휴무추가 : ".$chkDateReturn."<br />";
echo "<br />";
$chkDate = '2021-01-03'; // 일요일
$chkDateReturn = get_date($chkDate);
echo "일요일 : ".$chkDate."<br />";
echo "일요일 휴무추가 : ".$chkDateReturn."<br />";
echo "<br />";
$chkDate = '2021-01-06'; // 휴무일
$chkDateReturn = get_date($chkDate);
echo "휴무일 : ".$chkDate."<br />";
echo "휴무추가 : ".$chkDateReturn."<br />";
echo "<br />";
$chkDate = '2021-01-05'; // 평일
$chkDateReturn = get_date($chkDate);
echo "휴무일 : ".$chkDate."<br />";
echo "휴무추가 : ".$chkDateReturn."<br />";
echo "<br />";
function get_date($chkDate) {
global $holy;
$chkDateYoil = date("w", strtotime($chkDate)); // 토요일(6), 일요일(0)
if ($chkDateYoil == 6) {
// 토요일은 2일 추가
$timestamp = strtotime($chkDate." +2 days");
$return_date = date("Y-m-d", $timestamp);
} else if ($chkDateYoil == 0) {
// 일요일은 1일 추가
$timestamp = strtotime($chkDate." +1 days");
$return_date = date("Y-m-d", $timestamp);
} else {
// 평일인경우 휴무일 비교
$is_holy = 0;
foreach ($holy as $key => $row) {
if ($chkDate == $row) {
// 공휴일이라면 1일 추가
$is_holy = 1;
$timestamp = strtotime($chkDate." +1 days");
$return_date = date("Y-m-d", $timestamp);
}
}
if ($is_holy == 0) {
// 휴무일이 아닌경우 해당날짜로 리턴
$return_date = $chkDate;
}
}
return $return_date;
}
?>
이렇게 하시면 될거 같네요
$holy = ['2021-01-06','2021-01-07','2021-01-08'];
$return_date = $tmp_date = $chkDate = "2021-01-06";
if(in_array($chkDate, $holy) === true) {
$tmp_date = date("Y-m-d", strtotime("+1 day", strtotime(end($holy))));
}
$n = date("N", strtotime($tmp_date));
if($n < 6) {
$return_date = $tmp_date;
} else {
$return_date = date("Y-m-d", strtotime((8 - $n)." day", strtotime($tmp_date)));
}
echo $return_date;
$chkDateYoil = date("w", strtotime($chkDate)); // 토요일(6), 일요일(0)
=> 요일을 숫자로 변경
=> 월(1), 화(2) ~ 토(6), 일(0)
$day_plus = 7 - $chkDateYoil + 1;
=> 일주일 - (현재요일숫자) + (월요일이므로 하루더함)
=> 월요일을 예로 들면 숫자가 1이므로 해당 날짜에서 6일을 더한후 +1일을 하면 다음주 월요일
=> 7일에서 해당 날짜의 요일숫자를 뺀 숫자를 더하면 그주 일요일이고 거기에 1을 더해서 월요일
=> 간단하게 하면
=> $day_plus = 8 - $chkDateYoil;
=> 이렇게 해도 될거 같네요
$timestamp = strtotime($chkDate." +".$day_plus." days");
$return_date = date("Y-m-d", $timestamp);