문제

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;

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top