날짜 계산질문입니다(영업일) 채택완료
지솩
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 포인트
마르스컴퍼니
Expert
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를 어느쪽에 붙여야 하는지 알려주시면 감사하겠습니다..
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;
}
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년 전
정말 감사합니다.. 많은 도움 되었습니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인