我的视频时长以HH:MM:SS格式存储。我想把它显示为HH小时,MM分钟,SS秒。如果小于1,则不应显示小时数。
最好的方法是什么?
答案 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;