1
$time1 = "01:00";
$time2 = "04:55";
list($hours1, $minutes1) = explode(':', $time1);
$startTimestamp = mktime($hours1, $minutes1);

list($hours2, $minutes2) = explode(':', $time2);
$endTimestamp = mktime($hours2, $minutes2);

$seconds = $endTimestamp - $startTimestamp;
$minutes = ($seconds / 60) % 60;
$hours = round($seconds / (60 * 60));

echo $hours.':'.$minutes;
exit;

出力 4:55、3:55 である必要がありますか?

ここで何が問題なのですか?01:00 と 02:00 の場合は正常に動作しますが、上記では動作しませんか?

4

4 に答える 4

6

floor代わりに使用round...

于 2012-09-26T15:15:32.420 に答える
0

エラーの可能性を減らしながら、PHP で実行できる計算が多すぎる

$time1 = Datetime::createFromFormat("h:i", "01:00");
$time2 = Datetime::createFromFormat("h:i", "04:55");

$diff = $time1->diff($time2);
var_dump($diff->format("%h %i"));

出力

string '3:55' (length=4)
于 2012-09-26T15:20:01.330 に答える
0

以下を使用して時間を節約することもできますstrtotime

$time1 = strtotime("01:00");
$time2 = strtotime("04:55");

$seconds = $time2-$time1;
$minutes = ($seconds / 60) % 60;
$hours = floor($seconds / (60 * 60));

echo $hours.':'.$minutes;

前述のように、を使用floorすると、必要な結果が得られます。

結果

3:55
于 2012-09-26T15:21:20.580 に答える
0

または、単に整数にキャストします。

$hours = (int) ($seconds / (60 * 60));
于 2012-09-26T15:17:40.737 に答える