我以 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'). 。对于您所拥有的简单场景来说,这两种方法都可能太过分了。

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() 也能完成这项工作,甚至可能更快。但这是我读到这个问题时第一个想到的方法。

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

$小时= 0;$分钟= 0;$秒= 0;

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top