$start_time = '10:36:23';
$end_time = '10:36:26';
$v = strtotime($end_time) - strtotime($start_time);
echo date("h:i:s", $v);
結果は 00:00:03 になります。しかし、12:00:03 を示しています。
どうすればこれを解決できますか?
小文字のhは、12 時間形式で時間を示します。したがって、ゼロの時間は午前 0 時以降、つまり午前 12 時です。大文字のHを使用すると、必要に応じて表示されます。
echo date("H:i:s", $v);
あなたの違いは実際には時間ではなく、期間です。
日付をエコーアウトしている場所のエラーはecho date('H:i:s', $v);
、大文字の H でこれに変更します
差の計算は正しいですが、それを時間としてフォーマットするために$v == 3
使用しています。date
これにより、 に相当する現地時間が出力されます。これは1970-01-01 00:00:03 +0000
、現地のタイムゾーン (および場合によっては夏時間) によって異なる場合があります。
そのような方法で違いをフォーマットしたい場合は、gmdate
(ローカルのタイムゾーンに関係なく正しく表示されます) と 24 時間時計を使用できます。
echo gmdate("H:i:s", $v);
次を使用することもできますDateTime
。
$start_time = new DateTime('10:36:23', new DateTimeZone('UTC'));
$end_time = new DateTime('10:36:26', new DateTimeZone('UTC'));
$diff = $end_time->diff($start_time);
echo $diff->format("%H:%I:%S");
これは単なるヒントです。
datetime オブジェクトを使用して、2 つの日付の差を計算することもできます。
$start_time = new DateTime('10:36:23');
$end_time = new DateTime('10:36:26');
$diff = $start_time->diff($end_time);
print_r($diff);
結果:
DateInterval Object
(
[y] => 0
[m] => 0
[d] => 0
[h] => 0
[i] => 0
[s] => 3
[invert] => 0
[days] => 0
)
「s」は秒数を表します。