문제
HH:MM:SS 형식으로 저장된 비디오 재생 시간이 있습니다.HH시, MM분, SS초로 표시하고 싶습니다.1보다 작은 경우 시간이 표시되지 않습니다.
가장 좋은 접근 방식은 무엇입니까?
해결책
분할을 사용해보십시오
list($hh,$mm,$ss)= split(':',$duration);
다른 팁
이 같은?
$vals = explode(':', $duration);
if ( $vals[0] == 0 )
$result = $vals[1] . ' minutes, ' . $vals[2] . ' seconds';
else
$result = $vals[0] . 'hours, ' . $vals[1] . ' minutes, ' . $vals[2] . ' seconds';
한 가지 작은 변화는 다음과 같습니다:
$vals = explode(':', $duration);
if ( $vals[0] == 0 )
$result = "{$vals[1]} minutes, {$vals[2]} seconds";
else
$result = "{$vals[0]} hours, {$vals[1]} minutes, {$vals[2]} seconds";
아주 간단합니다:
list( $h, $m, $s) = explode(':', $hms);
echo ($h ? "$h hours, " : "").($m ? "$m minutes, " : "").(($h || $m) ? "and " : "")."$s seconds";
그러면 시간이나 분만 표시되고, 표시할 시간, 분 또는 둘 다가 있으면 초 앞에 "and"를 삽입합니다.정말 멋지게 만들고 싶다면 "시간"과 "시간"을 표시하는 코드를 추가할 수 있습니다.적절하다면 "시간", 분과 초도 마찬가지입니다.
PHP가 시간을 잘 처리하는데 왜 정규식을 사용하거나 폭발하는가?
$sTime = '04:20:00';
$oTime = new DateTime($sTime);
$aOutput = array();
if ($oTime->format('G') > 0) {
$aOutput[] = $oTime->format('G') . ' hours';
}
$aOutput[] = $oTime->format('i') . ' minutes';
$aOutput[] = $oTime->format('s') . ' seconds';
echo implode(', ', $aOutput);
장점은 원하는 대로 시간 형식을 다시 지정할 수 있다는 것입니다(오전/오후, 시간대 조정, 덧셈/뺄셈 등 포함).
초보자를 위해 더욱 개방적이고 단계별로 다양한 기능을 갖춘 다른 방법이 있습니다.그것은 또한 1시간과 여러 시간을 처리합니다...동일한 논리를 사용하여 0분 0초를 처리할 수 있습니다.
<?php
// your time
$var = "00:00:00";
if(substr($var, 0, 2) == 0){
$myTime = substr_replace(substr_replace($var, '', 0, 3), ' Minutes, ', 2, 1);
}
elseif(substr($var, 1, 1) == 1){
$myTime = substr_replace(substr_replace($var, ' Hour, ', 2, 1), ' Minutes, ', 11, 1);
}
else{
$myTime = substr_replace(substr_replace($var, ' Hours, ', 2, 1), ' Minutes, ', 12, 1);
}
// work with your variable
echo $myTime .' Seconds';
?>
문제에 대한 다른 접근 방식으로 답변해 드리겠습니다.내 접근 방식은 길이를 초 단위로 저장하는 것입니다.그런 다음 필요에 따라 다음을 사용하여 이 초를 hh:mm:ss로 쉽게 렌더링할 수 있습니다.
print gmdate($seconds >= 3600 ? 'H:i:s' : 'i:s', $seconds);
(귀하의 질문에 대해)
또는 데이터베이스에서 길이를 검색하려면 다음을 수행하세요.
SELECT * FROM videos WHERE length > 300;
예를 들어 길이가 5분 이상인 비디오를 검색하려는 경우입니다.
견고성을 위해 내장 기능을 정말로 사용하고 싶다면 다음을 시도해 보십시오.
date_default_timezone_set('UTC');
$date = strtotime($hms,0);
날짜 형식 지정 기능(date()
, strftime()
, 등)을 사용하여 원하는 방식으로 시간 형식을 지정합니다.또는 다음의 출력을 사용할 수 있습니다. strptime($hms,'%T')
.당신이 가지고 있는 간단한 시나리오에서는 둘 중 하나가 과잉일 수 있습니다.
폭발()은 팬지용입니다.이것은 다음을 위한 직업입니다. 정규 표현식!
<?php
preg_match('/^(\d\d):(\d\d):(\d\d)$/', $video_duration, $parts);
if ($parts[1] !== '00') {
echo("{$parts[1]} hours, {$parts[2]} minutes, {$parts[3]} seconds");
}
else {
echo("{$parts[2]} minutes, {$parts[3]} seconds");
}
전혀 테스트되지 않았지만 그런 것이 작동해야 합니다.이 코드는 시간 조각이 언제나 두 자리 숫자여야 합니다(예: 3시간짜리 비디오는 03:00:00
대신에 3:00:00
).
편집하다: 돌이켜보면 이를 위해 정규식을 사용하는 것은 아마도 과도한 엔지니어링의 경우일 것입니다.explod()는 작업을 마찬가지로 수행하며 이 경우에는 아마도 더 빠를 수도 있습니다.그런데 질문을 읽었을 때 가장 먼저 떠오르는 방법이었습니다.
PHP에서 00:00:00을 시, 분, 초로 변환하는 것은 정말 쉽습니다.
$시간 = 0;$분 = 0;$초 = 0;