2012-10-21 8 views
5

これをどのように出力することができますかHH:MM形式の時間差を取得する

HH:MM形式?

$to_time = strtotime("2008-12-13 10:42:00"); <--AM 
$from_time = strtotime("2008-12-14 8:21:00"); <-- PM 
$stat = round(abs($to_time - $from_time)/60,2). "min"; 

私はこのからもらったことは1299分

ですが、私はそれが出力

21Hを作成する方法を見つけ出すカント:41メートル

答えて

8

まず、8:21:00はあなたの場合を除き午前8時と解釈されますそれ以外の場合はDateTime::createFromFormat()で指定します。

DateTime::diff()を使用し、時間差を動作するように:

$to = new DateTime("2008-12-13 10:42:00"); 
$from = new DateTime("2008-12-14 8:21:00"); 

$stat = $to->diff($from); // DateInterval object 

echo $stat->format('%Hh:%Im'); 

これが唯一の24時間まで、2時間の間の時間/分の差を表示します。あなたは24時間以上を必要とする場合は、次の操作を行う必要があり

$hours = $stat->days * 24 + $stat->h; 
$minutes = $stat->i; 

printf('%02sh:%sm', $hours, $minutes); 
+0

日付の間に24時間以上が存在する場合に、この1はまた、正しい値を返さない –

+0

$スタットオブジェクトは、[DateIntervalのインスタンスであります](http://au.php.net/DateInterval)で、日/月/年の抽出方法に関する文書を確認してください。 – Alex

+0

'format'行は、日に関する情報が含まれておらず、誤った結果をもたらすので、削除/編集してください。 –

2

あなたの日付文字列にAMとPMを含める必要がまず第一に、それ以外の場合は2008-12-14 8:21:008:21 AM

と解釈されます

2つの日付の違いは2019です。これは33h:19mです。標準の日付形式では24時間しかサポートしていないため、カルトしません。あなたは整数として$statを維持しており、このようなようなsprintfでそれを表示する必要があります。

echo sprintf('%02dh:%02dm', $stat/60, $stat%60); 
関連する問題