
기술문서
>PHP
초를 동영상 재생 시간 (ISO 8601 형식) 으로 변환하는 함수
![]() |
평점 | 10.0 | 라이센스 | free |
---|---|---|---|---|
사용자평점 | 10.0 | 운영체제 | ||
다운로드 | 0 | 파일크기 | 0 | |
제작사 | 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초