0

私はこれに対する簡単な答えをどこでも探しましたが、うまくいくか、私の要件を満たす解決策を見つけることができませんでした。

私はデータをループしています。これは次のようになります。

Array
(
    [0] => 4c36fd909b37208b
    [1] => event:
    [2] => start_scan
    [3] => 2012-08-17 12:01:15
)
Array
(
    [0] => 4c36fd909b37208b
    [1] => sysaction:
    [2] => lower_device
    [3] => 2012-08-17 12:01:19
)
Array
(
    [0] => 4c36fd909b37208b
    [1] => event:
    [2] => how_to_use_displayed
    [3] => 2012-08-17 12:01:46
)
Array
(
    [0] => 4c36fd909b37208b
    [1] => event:
    [2] => scan_displayed
    [3] => 2012-08-17 12:01:59
)
Array
(
    [0] => 4c36fd909b37208b
    [1] => sysaction:
    [2] => layer_1_display_on_recognition
    [3] => 2012-08-17 12:02:23
)

2つの日付の間の時間を計算したいのですが、結果はHH:MM:SSの形式である必要があります。上記の例のデータでは、2012-08-1712:01:15と2012-08-1712:02:23の違いが必要です。これは00:01:08である必要があります。

私はここからコードを使用しようとしました:http ://www.if-not-true-then-false.com/2010/php-calculate-real-differences-between-two-dates-or-timestamps/しかしそれは00:00:20を返し続けます

私もこれを試しました(最初の配列の日付は$ xpTimeとして保存され、最後の配列の日付は$ xpEndTimeTmpに設定されています):

$start = new DateTime($xpTime);
$end = new DateTime($xpEndTimeTmp);
$diff = $start->diff($end);
$xpDuration = date('H:i:s', strtotime($diff->h.':'.$diff->i.':'.$diff->s));

しかし、それはどちらかで機能しているようです(同じ時間、分、異なる秒を返します)。

誰かが私を助けてくれること、私が間違っていることを教えてくれること、または私を正しい軌道に乗せることができるサンプルコードを持っていることを願っています!

4

3 に答える 3

2
$t1 = '2012-08-17 12:01:15';
$t2 = '2012-08-17 12:02:23';

echo gmdate("H:i:s", strtotime($t2) - strtotime($t1));

結果

00:01:08
于 2012-08-17T17:49:52.940 に答える
1

このバージョンは、差が24時間を超える場合にも機能します。

$start = strtotime('2012-08-17 12:01:15');
$end = strtotime('2012-08-17 12:02:23');
$delta = $end - $start;

$hours = floor($delta / 3600);
$remainder = $delta - $hours * 3600;
$formattedDelta = sprintf('%02d', $hours) . gmdate(':i:s', $remainder);
echo $formattedDelta;
于 2012-08-17T17:53:12.573 に答える
0

時間差の計算方法だけを知りたい場合は、質問にそのすべてのコードを指定する必要はありません。
単純な:'2012-08-1712:01:15と2012-08-1812:02:23の違いが必要です。これは24:01:08である必要があります'ははるかに明確でした。この場合、JanisElstsの答えは私を打ち負かしました:)

ただし、理由のためにサンプルコードをそこに配置する場合は、最初と最後の取得方法も知りたいので、多次元配列(作業時間差ルーチンと組み合わせて)を調べる必要があります。

したがって、すべての単一配列をと呼ばれる1つのラッピング配列に詰め込んだとすると$log、次のようになります。

$timeDiff = strtotime(end($log)[3]) - strtotime(reset($log)[3]);

$hours = floor($timeDiff / 3600);
$remainder = $timeDiff - $hours * 3600;
$formattedTime = sprintf('%02d', $hours) . gmdate(':i:s', $remainder);
echo $formattedTime;
于 2012-08-17T18:10:45.637 に答える