你如何在PHP中将00:00:00转换为小时,分钟,秒?

时间:2008-09-17 05:35:42

标签: php date

我的视频时长以HH:MM:SS格式存储。我想把它显示为HH小时,MM分钟,SS秒。如果小于1,则不应显示小时数。

最好的方法是什么?

10 个答案:

答案 0 :(得分:3)

这样的东西?

$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';

答案 1 :(得分:2)

尝试使用拆分

list($hh,$mm,$ss)= split(':',$duration);

答案 2 :(得分:1)

可能会有一点变化:

$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";

答案 3 :(得分:1)

非常简单:

list( $h, $m, $s) = explode(':', $hms);
echo ($h ? "$h hours, " : "").($m ? "$m minutes, " : "").(($h || $m) ? "and " : "")."$s seconds";

如果有,则仅显示小时或分钟,如果有小时,分钟或两者显示,则在秒之前插入“和”。如果你想变得非常花哨,你可以添加一些代码来适当地显示“小时”与“小时”,同上几分钟和几秒钟。

答案 4 :(得分:1)

当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);

好处是您可以根据需要重新格式化时间(包括上午/下午,时区调整,加法/减法等)。

答案 5 :(得分:0)

这是一种不同的方式,具有不同的功能,对于新手而言更加开放和更加循序渐进。它还可以处理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';

?>

答案 6 :(得分:0)

如果你真的想使用内置函数,也许是为了健壮,你可以试试

 date_default_timezone_set('UTC'); 
 $date = strtotime($hms,0); 

并使用任何日期格式设置功能(date()strftime()等)以您希望的任何方式格式化时间。或者您可以使用strptime($hms,'%T')的输出。对于你所拥有的简单场景,这两种情况都可能过度。

答案 7 :(得分:0)

我会用不同的方法回答问题。我的方法是以秒为单位存储长度。然后根据需要,通过使用:

,可以很容易地将这些秒渲染为hh:mm:ss

print gmdate($seconds >= 3600 ? 'H:i:s' : 'i:s', $seconds);(针对您的问题)

或搜索数据库中的长度:

例如,

SELECT * FROM videos WHERE length > 300;搜索长度超过5分钟的视频。

答案 8 :(得分:-1)

explode()适用于三色紫罗兰。这是regular expressions的工作!

<?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");
}

完全未经测试,但这样的事情应该有效。请注意,此代码假定小时片段始终为两位数(例如,三小时视频将为03:00:00而不是3:00:00。)

编辑:回想起来,使用正则表达式可能是过度工程的情况; explode()也可以完成这项工作,在这种情况下甚至可能更快。但这是我在阅读这个问题时想到的第一种方法。

答案 9 :(得分:-1)

在PHP中将00:00:00转换为小时,分钟和秒非常简单。

$ hours = 0; $ minutes = 0; $ seconds = 0;