为什么日期时间>天总是返回正数

  • 本文关键字:返回 日期 时间 php datetime
  • 更新时间 :
  • 英文 :

// 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将返回正负

相关内容

  • 没有找到相关文章

最新更新