PHP で 00:00:00 を時、分、秒に変換するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/80319

  •  09-06-2019
  •  | 
  •  

質問

動画の再生時間を 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");
}

完全にテストされていませんが、そのようなものは機能するはずです。このコードは、時間フラグメントが いつも 2 桁にする (たとえば、3 時間のビデオは次のようになります) 03:00:00 の代わりに 3:00:00).

編集: 振り返ってみると、これに正規表現を使用するのはおそらくオーバーエンジニアリングのケースです。この場合、explore() も同様に機能し、おそらくさらに高速になります。しかし、質問を読んだときに最初に思い浮かんだのはこの方法でした。

PHP で 00:00:00 を時、分、秒に変換するのは非常に簡単です。

$時間 = 0;$分 = 0;$秒 = 0;

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top