PHP에서 strtotime 함수를 사용하면 시간 형식의 문자열을 타임스탬프(초 단위)로 변환할 수 있습니다. 이 함수를 활용하면 여러 개의 시간 값이 담긴 배열의 총 시간을 손쉽게 계산할 수 있습니다.
예제 코드
<?php
$time_arr = [
'00:12:56', '10:11:12', '24:12:44',
'50:51:52', '10:10:10'
];
$time = strtotime('00:00:00');
$total_time = 0;
foreach( $time_arr as $ele )
{
$sec_time = strtotime($ele) - $time;
$total_time = $total_time + $sec_time;
}
$hours = intval($total_time / 3600);
$total_time = $total_time - ($hours * 3600);
$min = intval($total_time / 60);
$sec = $total_time - ($min * 60);
print_r("The total time is :");
echo ("$hours:$min:$sec");
?>
출력 결과
The total time is :-441915:-12:-58
코드 동작 원리
먼저 시간 형식의 데이터가 담긴 배열을 정의한 뒤, strtotime 함수를 사용해 각 시간 문자열을 타임스탬프로 변환합니다. 이때 기준점이 되는 '00:00:00'의 타임스탬프를 미리 구해 두고, 각 요소의 타임스탬프에서 이 값을 빼면 해당 시간이 초 단위 숫자로 변환됩니다.
이후 foreach 루프를 사용해 배열의 모든 요소를 순회하면서 각 시간 값을 초 단위로 누적 합산합니다.
누적된 총 초(second) 값에서 다음과 같이 시, 분, 초를 분리합니다.
- 시(hours): 총 초를 3600으로 나눈 몫
- 분(minutes): 시간을 제외한 나머지 초를 60으로 나눈 몫
- 초(seconds): 분을 제외한 나머지 값
마지막으로 계산된 총 시간을 화면에 출력합니다.
참고 사항
strtotime은 일반적인 시각(HH:MM:SS)을 해석하도록 설계되어 있기 때문에, 위 예제처럼 24시간을 초과하는 값(예: '24:12:44', '50:51:52')이 포함되면 의도와 다른 음수 결과가 나올 수 있습니다. 이러한 경우에는 각 시간 문자열을 explode 등으로 분리하여 시·분·초를 각각 정수로 변환한 후 초 단위로 합산하는 방식이 더 안정적입니다.