날짜 계산질문입니다(영업일)

날짜 계산질문입니다(영업일)

QA

날짜 계산질문입니다(영업일)

본문

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

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

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

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

 

 


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

이 질문에 댓글 쓰기 :

답변 1

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

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

 


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

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

염치없지만 한가지 더 궁금한게.
in_array 사용을 어떻게 해야 할지 모르겠습니다 ㅠ
공휴일리스트를 뽑아놨는데 in_arrray를 어느쪽에 붙여야 하는지 알려주시면 감사하겠습니다..

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

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

회원로그인

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