php date_diff问题

时间:2018-10-25 12:20:00

标签: php date datediff

我试图找出两个日期之间的月数,假设这些日期可以说是介于2018-08-27和2018-10-10之间。我想要的是基于这些日期的函数,以返回3个月的差异08,09,10。我有以下功能,但似乎只输出1个月;

public function getGraphMonthsCount(){

        $now =  '2018-08-27';
        $then = '2018-10-10';

        $newNow = new DateTime($now);
        $newThen =  new DateTime($then);

        $result = $newNow->diff($newThen)->m;

        return $result;
    }

这将返回值1。

这是没有-> m参数的diff函数输出的结果

object(DateInterval)#157 (15) {
  ["y"]=>
  int(0)
  ["m"]=>
  int(1)
  ["d"]=>
  int(13)
  ["h"]=>
  int(0)
  ["i"]=>
  int(0)
  ["s"]=>
  int(0)
  ["weekday"]=>
  int(0)
  ["weekday_behavior"]=>
  int(0)
  ["first_last_day_of"]=>
  int(0)
  ["invert"]=>
  int(0)
  ["days"]=>
  int(44)
  ["special_type"]=>
  int(0)
  ["special_amount"]=>
  int(0)
  ["have_weekday_relative"]=>
  int(0)
  ["have_special_relative"]=>
  int(0)
}

我不知道为什么它只提供13个“ d”和1个“ m”,但是如果您进一步查看obj,您会发现它确实具有正确的“天数”

有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

  

我想要的是一个基于这些日期的函数以返回3个月的差额

您可以尝试以下操作:

$newNow = new DateTime($now);
$newNow = $newNow->modify('first day of this month');

$newThen = new DateTime($then);
$newThen = $newThen->modify('first day of next month');

$result = $newNow->diff($newThen)->m;

测试结果:

$now =  '2018-08-27';
$then = '2018-10-10';
// 3

$now =  '2018-08-10';
$then = '2018-08-27';
// 1