// 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?如果日期是过去的,我如何返回一个负数?
您可以使用DateInterval::format
return $interval->format("%r%a");
必要时转换为整型:
return (int)$interval->format("%r%a");
如果Date是过去的,则将其反转。
如果Date是将来的,则反转为0。
$invert = $interval->invert;
答案如下:
$today = new DateTime();
$date = new DateTime('2013-03-10');
$interval = $today->diff($date);
echo $interval->format("%r%a");
Test it here
当您区分两个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') . "nn";
// -88714
$interval2 = $foundedDateObj->diff($todayDateObj);
echo $interval2->format('%r%a');
// 88714
你可以这样使用时间戳。
<?php
$date1 = '2015-01-02';
$date2 = '2015-01-05';
$diff = strtotime($date1, 'Y-m-d') - strtotime($date2, 'Y-m-d');
?>
$diff将返回正负