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

时间:2020-03-05 18:58:01  来源:igfitidea点击:

我的视频时长以HH:MM:SS格式存储。我想将其显示为HH小时,MM分钟,SS秒。如果小于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';

回答

尝试使用拆分

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

回答

explode()用于三色堇。这是正则表达式的工作!

<?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()可以很好地完成这项工作,在这种情况下甚至可能更快。但这是我阅读问题时想到的第一种方法。

回答

很简单:

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

如果有小时或者分钟,则仅显示小时或者分钟;如果有小时,分钟或者两者都显示,则在秒之前插入"和"。如果我们真的想花哨的话,可以添加一些代码以分别显示"小时"与"小时",同上几分钟和几秒钟。

回答

这是一种不同的方式,具有不同的功能,对新手来说更开放,更一步一步地发展。它还可以处理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';

?>

回答

如果我们确实想使用内置函数(也许出于鲁棒性),可以尝试

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

并使用任何日期格式化功能(" date()"," strftime()"等)以所需的任何方式格式化时间。或者我们可以使用strptime($ hms,'%T')的输出。对于我们所拥有的简单方案,这两种方法都可能会过大。

回答

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

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

回答

我将以不同的方式回答问题。我的方法是以秒为单位存储长度。然后根据需要,使用以下命令很容易将这些秒呈现为hh:mm:ss:

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

或者在数据库中搜索长度:

例如,从长度> 300的视频中选择*,以搜索长度超过5分钟的视频。

回答

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

好处是我们可以根据自己的喜好重新设置时间(包括上午/下午,时区调整,加/减等)。