如果差异超过一年,则date_diff返回0

时间:2014-10-10 15:57:10

标签: php date datetime

我正在使用此功能获取两个日期之间的月份差异。

$interval = date_diff(date_create('2015-10-08'), date_create('2014-10-10'));
$total_months = $interval->format('%m');

结果: 11(这是正确的!)

但是,当差异超过一年时,

$interval = date_diff(date_create('2015-11-08'), date_create('2014-10-10'));
$total_months = $interval->format('%m');

结果: 0(那是错误的!)

为什么它会返回0?有什么方法可以让我在任何两个日期之间有所区别吗?谢谢!

3 个答案:

答案 0 :(得分:6)

2015-11-08 to 2014-10-10 12个月成为一年。所以它返回0个月。计算从$interval开始,然后将(year * 12)添加到月数的年数。这里的例子......

$interval = date_diff(date_create('2015-11-08'), date_create('2014-10-10'));
$year = $interval->format('%Y');
echo $total_months = $interval->format('%m') + $year * 12;

答案 1 :(得分:1)

或更好:

$total_months = $interval->y * 12 + $interval->m;

您有多年和几个月的字段,无需使用格式获取部分作为文本以便以后添加部分!

答案 2 :(得分:1)

这有点棘手,需要一轮工作,尝试以下,这可能 是的。

$first = new DateTime('2015-11-08',new DateTimeZone('America/New_York'));

$second = new DateTime('2014-10-10',new DateTimeZone('America/New_York'));

$diff = $second->diff($first);

$months = (Int)($diff->days/30); 
echo "The two dates have $months months between them."; 

输出:两个日期之间有13个月。