55
// Difference from a date in the future:
$a = new DateTime('2000-01-01');
$b = new DateTime('2000-01-05');
$interval = $b->diff($a);
return $interval->days;             // Returns 4


// Difference from a date in the past:
$a = new DateTime('2000-01-01');
$b = new DateTime('1999-12-28');
$interval = $a->diff($b);           // Arguments swapped
return $interval->days;             // Returns 4

これらの関数の両方が正の4を返すのはなぜですか?日付が過去の場合、負の数を返すにはどうすればよいですか?

4

5 に答える 5

77

を使用できますDateInterval::format

return $interval->format("%r%a");

必要に応じてintにキャストします。

return (int)$interval->format("%r%a");

于 2013-03-14T22:20:48.210 に答える
26

日付が過去の場合、反転は1になります。
日付が将来の場合、反転は0になります。

$invert    = $interval->invert; 
于 2016-11-16T05:41:54.110 に答える
10

これがあなたの答えです:

$today = new DateTime();
$date = new DateTime('2013-03-10');
$interval = $today->diff($date);
echo $interval->format("%r%a");

ここでテストしてください

于 2013-03-14T22:49:22.683 に答える
4

2つのDateTimeオブジェクトを比較する場合、次のルールが適用されます。

$objA->diff($objB) == $objB - $objA

例として:

$todayDateObj = new \DateTime('2016/5/26');
$foundedDateObj = new \DateTime('1773/7/4');

$interval = $todayDateObj->diff($foundedDateObj);
echo $interval->format('%r%a') . "\n\n";
// -88714

$interval2 = $foundedDateObj->diff($todayDateObj);
echo $interval2->format('%r%a');
// 88714
于 2016-06-24T18:22:45.170 に答える
2

このようなタイムスタンプを使用できます。

<?php 
    $date1 = '2015-01-02';
    $date2 = '2015-01-05';
    $diff = strtotime($date1, 'Y-m-d') - strtotime($date2, 'Y-m-d'); 
?>

$diffは負または正を返します。

于 2015-12-02T04:37:53.393 に答える