공휴일 체크 sql 질문입니다.

공휴일 체크 sql 질문입니다.

QA

공휴일 체크 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);

 

=> 공휴일 부분을 이렇게 고치시면 될거 같네요.

정말 감사합니다.. 잘되네요

근데  $day_plus = 7 - $chkDateYoil + 1; 이부분이 정말 이해가 안됩니다.

쉬워보이는데 해당 부분이 어떻게 공휴일 배열을 모두 체크할수 잇는건가요? ㅠ

설명부탁드려도될까요.

한가지 오류가 생긴거같은데 하루종일 이것만봐도 해결이 안됩니다..




$holy = [
    '2020-12-23',
    '2020-12-24',
    '2020-12-25',
    '2020-12-28',
    ];



$chkDate = '2020-12-23'; // 휴무일
$chkDateReturn = get_date($chkDate);

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");
        $chkDate = date("Y-m-d", $timestamp);

    } else if ($chkDateYoil == 0) {
        // 일요일은 1일 추가
        $timestamp = strtotime($chkDate . " +1 days");
        $chkDate = date("Y-m-d", $timestamp);

    }
    // 평일인경우 휴무일 비교
    foreach ($holy as $key => $holyday) {
        if ($chkDate == $holyday) {
            // 공휴일이라면 1일 추가
            $day_plus = 8 - $chkDateYoil;
            $timestamp = strtotime($chkDate." +".$day_plus." days");
            $chkDate = date("Y-m-d", $timestamp);
        }

    }


    return $chkDate;
}


주말을 지나 월요일(12월 28일)까지 휴무일로 지정되어도

12월 29일로 아웃풋이 나와야하는데 21년 1월 2일로 나온느데 왜그런지 도무지 모르겟습니다..

<?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;

date("Y-m-d", strtotime((8 - $n)." day", strtotime($tmp_date)));
여길 말씀하시는 거 같네요.
https://www.php.net/manual/en/function.strtotime.php#refsect1-function.strtotime-examples
여길 보시면 이해가 갈 겁니다.

* 지금 제가 남긴 코드는 보니 오류가 있네요.

$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);

답변을 작성하시기 전에 로그인 해주세요.
전체 126,525 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT