0
$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 を示しています。

どうすればこれを解決できますか?

4

4 に答える 4

2

小文字のhは、12 時間形式で時間を示します。したがって、ゼロの時間は午前 0 時以降、つまり午前 12 時です。大文字のHを使用すると、必要に応じて表示されます。

echo date("H:i:s", $v);

あなたの違いは実際には時間ではなく、期間です。

于 2013-07-16T14:36:10.830 に答える
0

日付をエコーアウトしている場所のエラーはecho date('H:i:s', $v);、大文字の H でこれに変更します

于 2013-07-16T14:36:09.423 に答える
0

差の計算は正しいですが、それを時間としてフォーマットするために$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");
于 2013-07-16T14:37:44.130 に答える
0

これは単なるヒントです。

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」は秒数を表します。

于 2013-07-16T14:41:21.870 に答える