휴가시간 계산하는법?
본문
안녕하세요?
휴가시간 계산하는 것이 생각보다 어렵네요.
하루 근무시간이 정상근무일 때 09시~18시이고, 점심시간 12시~13시간으로 하루 8시간 근무자일때
휴가시간을 계산하는 코드가 궁금합니다.
예시1)
휴가시작일:= "2023-04-16 15:00:00"
휴가종류일:= "2023-04-17 10:00:00"
일때는 휴가시간이 4시간이고
예시2)
휴가시작일:= "2023-04-16 16:00:00" ;<--- 2시간
휴가종류일:= "2023-04-17 14:00:00" ;<--- 4시간
일때는 휴가시간이 6시간입니다.
예시3)
휴가시작일:= "2023-04-16 10:00:00" ;<--- 6시간
휴가종류일:= "2023-04-17 10:00:00" ;<--- 1시간
일때는 휴가시간이 7시간입니다.
이를 만족하는 코드나 산식이 궁금합니다.
답변 2
예시2 번을 제가 생각한 방식으로 구해봤습니다. 쿼리로 했습니다.
SELECT
TIMESTAMPDIFF( MINUTE , date_format('2023-04-16 16:00:00', '%Y-%m-%d %H:%i:%S')
, date_format('2023-04-16 18:00:00', '%Y-%m-%d %H:%i:%S') )
+
TIMESTAMPDIFF( MINUTE , date_format('2023-04-17 09:00:00', '%Y-%m-%d %H:%i:%S')
, date_format('2023-04-17 12:00:00', '%Y-%m-%d %H:%i:%S') )
+
TIMESTAMPDIFF( MINUTE , date_format('2023-04-17 13:00:00', '%Y-%m-%d %H:%i:%S')
, date_format('2023-04-17 14:00:00', '%Y-%m-%d %H:%i:%S') )
FROM DUAL
MINUTE ==> 필요하시면 시간 단위로 변경하시던가 60(분)으로 나누시면 될 겁니다.
예시3에서 왜 6시간이죠?
어쨌든 질문의 코드
$start= "2023-04-16 09:00:00";
$end = "2023-04-17 18:00:00";
$start_time= substr($start , 11 , 2);
$end_time = substr($end , 11 , 2);
$rtime = 0;
if($start_time <= 12) $rtime = 1;
if($end_time >= 13) $rtime += 1;
$total = 18 - $start_time + $end_time - 9 - $rtime;