기술문서
>PHP
초를 동영상 재생 시간 (ISO 8601 형식) 으로 변환하는 함수
주요 프로그램 스펙
- 평점: 10.0
- 라이선스: free
- 운영체제:
- 파일 크기: 0
피드백 및 다운로드
- 사용자 평점: 10.0
- 다운로드 수: 3
- 조회수: 130
제조사 및 등록 정보
- 제작사: LUZENSOFT
- 등록일: 2025-06-08 16:52:41
- 설명
PHP로 초를 ISO 8601 형식의 동영상 재생 시간으로 변환하는 함수는 다음과 같습니다.
PHP
<?php
/**
* 초를 ISO 8601 형식의 동영상 재생 시간으로 변환합니다.
*
* @param int $seconds 변환할 총 초 단위 시간.
* @return string ISO 8601 형식의 시간 문자열 (PTnHnMnS).
*/
function convertSecondsToISO8601Duration(int $seconds): string {
if ($seconds < 0) {
throw new InvalidArgumentException("시간은 음수일 수 없습니다.");
}
$dt = new DateTime('@' . $seconds, new DateTimeZone('UTC'));
$dtStart = new DateTime('@0', new DateTimeZone('UTC'));
$interval = $dtStart->diff($dt);
$duration = 'PT';
if ($interval->h > 0) {
$duration .= $interval->h . 'H';
}
if ($interval->i > 0) {
$duration .= $interval->i . 'M';
}
if ($interval->s > 0 || ($interval->h === 0 && $interval->i === 0)) { // 0초인 경우에도 '0S'를 포함
$duration .= $interval->s . 'S';
}
// 만약 H, M, S 아무것도 없는 0초인 경우, PT0S로 처리
if ($duration === 'PT') {
$duration = 'PT0S';
}
return $duration;
}
// 사용 예시
echo convertSecondsToISO8601Duration(0) . "n"; // PT0S
echo convertSecondsToISO8601Duration(5) . "n"; // PT5S
echo convertSecondsToISO8601Duration(60) . "n"; // PT1M
echo convertSecondsToISO8601Duration(65) . "n"; // PT1M5S
echo convertSecondsToISO8601Duration(3600) . "n"; // PT1H
echo convertSecondsToISO8601Duration(3605) . "n"; // PT1H5S
echo convertSecondsToISO8601Duration(3665) . "n"; // PT1H1M5S
echo convertSecondsToISO8601Duration(90000) . "n"; // PT25H
echo convertSecondsToISO8601Duration(123456) . "n"; // PT34H17M36S
// 음수 입력 시 예외 처리
try {
echo convertSecondsToISO8601Duration(-10) . "n";
} catch (InvalidArgumentException $e) {
echo "에러: " . $e->getMessage() . "n";
}
?>
함수 설명
이 함수는 PHP의 DateTime 및 DateInterval 객체를 사용하여 ISO 8601 형식의 기간을 계산합니다.
음수 처리: 입력된 초가 음수일 경우
InvalidArgumentException을 발생시켜 오류를 명확히 합니다.DateTime객체 생성:new DateTime('@' . $seconds, new DateTimeZone('UTC')): 입력된$seconds값을 Unix 타임스탬프(초)로 해석하여DateTime객체를 생성합니다. UTC 시간대를 명시하여 시간대 변환으로 인한 오류를 방지합니다.new DateTime('@0', new DateTimeZone('UTC')): 기준점 역할을 할 0초DateTime객체를 생성합니다.
DateInterval계산:$dtStart->diff($dt):DateTime객체 간의 차이를 계산하여DateInterval객체를 반환합니다. 이 객체에는 시간, 분, 초 등의 정보가 포함되어 있습니다.
ISO 8601 형식 구성:
$duration = 'PT';: ISO 8601 기간은 항상P(기간)으로 시작하고, 그 뒤에T(시간 구성 요소)가 옵니다.$interval->h,$interval->i,$interval->s:DateInterval객체에서 시간(hour), 분(minute), 초(second) 값을 가져옵니다.if ($interval->h > 0) { $duration .= $interval->h . 'H'; }: 시간이 0보다 크면nH형식으로 추가합니다.if ($interval->i > 0) { $duration .= $interval->i . 'M'; }: 분이 0보다 크면nM형식으로 추가합니다.if ($interval->s > 0 || ($interval->h === 0 && $interval->i === 0)) { $duration .= $interval->s . 'S'; }: 초가 0보다 크거나 (총 시간이) 시간과 분이 모두 0인 경우(즉, 0초인 경우)nS형식으로 추가합니다. 이렇게 하면PT0S와 같은 출력을 보장합니다.if ($duration === 'PT') { $duration = 'PT0S'; }: 만약 모든 시간 구성 요소가 0이어서PT만 남게 되면, 이를PT0S로 재설정하여 올바른 ISO 8601 형식을 유지합니다.
ISO 8601 기간 형식
ISO 8601 기간 형식은 일반적으로 P로 시작하며, 그 뒤에 기간을 나타내는 구성 요소가 옵니다. 시간 구성 요소는 T로 시작하며, 각 요소는 숫자와 함께 단위를 나타내는 문자를 사용합니다.
P(기간)T(시간 구성 요소의 시작)H(시간)M(분)S(초)
예시:
PT0S: 0초PT30S: 30초PT1M: 1분PT1M30S: 1분 30초PT1H: 1시간PT1H30M: 1시간 30분PT1H30M15S: 1시간 30분 15초