테스트 사이트 - 개발 중인 베타 버전입니다

날짜 계산질문입니다(영업일) 채택완료

지솩 4년 전 조회 1,857

오늘날짜 21.04.22(목) 을 기준으로 주말,공휴일,매월말일을 제외 한 +3영업일을 구하고자 합니다.

21.04.22(목)의 3영업일이면 21.04.27(화) 입니다.

매월말일도 쉬는날로 쳐줘야 하는데 너무 어렵습니다..

이걸 php 로 구하고자 하는데 어떻게 해야 하는지 궁금합니다.

 

 

</p>

<p>function calcDate($date, $diff) { 

    

    

    

    

    if( $diff < 0) { 

        $sign = "-"; 

    } else { 

        $sign = "+"; 

    } 

    

    // 1. 기본적으로 토일을 제외하고 영업일을 계산해준다. 

    do { 

        $date = date("Y-m-d", strtotime("{$sign}1 days", strtotime($date))); // 토,일 이면 한번 더 돈다. 

        

        if (date("w", strtotime($date)) != 0 && date("w", strtotime($date)) != 6  ) { 

            if ($sign === "-") { $diff++; 

                

            } else { 

                $diff--; 

            } 

        } 

    } 

    while ($diff != 0); 

    return $date; 

}</p>

<p>

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

채택된 답변
+20 포인트
4년 전

공휴일은 적용하지 못했습니다.

공휴일을 array 변수에 저장한다면 in_array() 를 활용해 볼 수 있습니다.

 

</p>

<p>$date2 = add_days('2021-04-22', 3);

echo $date2;</p>

<p> </p>

<p>$date2 = add_days('2021-04-28', 3);

echo $date2;</p>

<p>

function add_days($date, $days) {

    $last_day = date('Y-m-t', strtotime($date));

    

    for ($i = 0; $i < $days; $i++) {

        $r = strtotime('+1 day', strtotime($date));

        $date = date('Y-m-d', $r);

        $yoil = date('N', $r);

        if ($yoil > 5) // 토일 제외

            $days++;

        if ($date == $last_day) // 말일 제외

            $days++;

        

    }

    return  $date;

}</p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 4개

지솩
4년 전
와.. 정말 감사합니다. 한방에 풀렸습니다. 감사합니다!!
지솩
4년 전
염치없지만 한가지 더 궁금한게.
in_array 사용을 어떻게 해야 할지 모르겠습니다 ㅠ
공휴일리스트를 뽑아놨는데 in_arrray를 어느쪽에 붙여야 하는지 알려주시면 감사하겠습니다..
마르스컴퍼니
4년 전
$date2 = add_days('2021-04-22', 3);
echo $date2;

$date2 = add_days('2021-04-28', 3);
echo $date2;

$arr = array("2021-03-01", "2021-05-05", "2021-08-15");

function add_days($date, $days) {
global $arr;

$last_day = date('Y-m-t', strtotime($date));

for ($i = 0; $i < $days; $i++) {
$r = strtotime('+1 day', strtotime($date));
$date = date('Y-m-d', $r);
$yoil = date('N', $r);
if ($yoil > 5) // 토일 제외
$days++;
if ($date == $last_day) // 말일 제외
$days++;
if (in_array($date, $arr)) // 공휴일 제외
$days++;

}
return $date;
}
지솩
4년 전
정말 감사합니다.. 많은 도움 되었습니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인