ビデオの長さを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);
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( $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");
}
完全にテストされていませんが、そのようなものは機能するはずです。このコードは、時間の断片が常に2桁であると想定していることに注意してください(たとえば、3時間のビデオは03:00:00
代わりになります3:00:00
)。
編集:振り返ってみると、これに正規表現を使用することは、おそらく過剰設計の場合です。explode()も同様に機能し、この場合はおそらくさらに高速になります。しかし、それは私が質問を読んだときに頭に浮かんだ最初の方法でした。
PHP で 00:00:00 を時、分、秒に変換するのは非常に簡単です。
$時間 = 0; $分 = 0; $秒 = 0;