如何在PHP中将00:00:00转换为小时,分钟,秒?
我的视频时长以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);
好处是我们可以根据自己的喜好重新设置时间(包括上午/下午,时区调整,加/减等)。