37

2つの日時の差を取得して、それをdatetime. を使用した例を見つけましdiffたが、正しく理解できないようです。

$timein = date("Y-m-d H:i:s");
$timeout = date("Y-m-d 20:00:00");
$totaltime = $timein->diff($timeout);

ただし、DBに$totaltimeログを記録します。0000-00-00 00:00:00これは、totaltime 変数をフォーマットしていないためですか?

4

7 に答える 7

80

あなたの違いでどの形式を探しているのかわかりませんが、DateTimeを使用してそれを行う方法は次のとおりです

$datetime1 = new DateTime();
$datetime2 = new DateTime('2011-01-03 17:13:00');
$interval = $datetime1->diff($datetime2);
$elapsed = $interval->format('%y years %m months %a days %h hours %i minutes %s seconds');
echo $elapsed;
于 2013-03-28T17:53:30.930 に答える
7

差分を計算するために日時差分とフォーマットを使用するだけです。

<?php
$datetime1 = new DateTime('2009-10-11 12:12:00');
$datetime2 = new DateTime('2009-10-13 10:12:00');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%Y-%m-%d %H:%i:%s');
?>

DATETIME形式の詳細については、こちら
を参照してください。 間隔形式は、必要に応じて変更できます。

これが実際の例です

PS これらの機能 ( diff()およびformat() ) は >= PHP 5.3.0 でのみ動作します

于 2013-03-28T18:04:00.447 に答える
1

以下のコードは、見つかった値の差のみを表示します。つまり、年 = 0 の場合、年は表示されません。


$diffs = [
    'years' => 'y',
    'months' => 'm',
    'days' => 'd',
    'hours' => 'h',
    'minutes' => 'i',
    'seconds' => 's'
];

$interval = $timeout->diff($timein);
$diffArr = [];
foreach ($diffs as $k => $v) {
    $d = $interval->format('%' . $v);
    if ($d > 0) {
        $diffArr[] = $d . ' ' . $k;
    }
}    
$diffStr = implode(', ', $diffArr);
echo 'Difference: ' . ($diffStr == '' ? '0' : $diffStr) . PHP_EOL;
于 2020-06-14T16:53:53.020 に答える