日期时间(月)之间差异计算的功能

时间:2017-01-17 10:04:56

标签: php datetime difference

我的目标是计算两个日期(包括起始月份)之间的月数。

我正在使用此功能进行计算。

function number_months($date1, $date2){
    $begin = new DateTime(date('Y-m-d', strtotime($date1)));
    $end = new DateTime(date('Y-m-d', strtotime($date2)));

    $diff = $end->diff($begin);
    return ($diff->format('%y') * 12) + $diff->format('%m') + 1;
}

在大多数情况下,工作正常,但是当函数参数例如:

$date1 = 2015-11-04 00:00:00
$date2 = 2017-02-01 00:00:00

函数返回:

15

应为16。我错过了什么?我在这里研究了Stackoverflow,尝试了各种提供代码的实现,但问题仍然存在。

感谢。

2 个答案:

答案 0 :(得分:0)

11-04 to 12-04 = 1 month.
12-04 to 01-04 = 1 month.
01-04 to 02-01 = 0 month.
Result diff->format('%m') = 2.

($ diff->格式('%y')* 12)+ $ diff->格式('%m')+ 1 = 1 * 12 + 2 + 1 = 15;     这是真的。

答案 1 :(得分:0)

问题是用户将设置项目的开始和结束日期。我需要为项目的每个月创建一个输入。所以在这种情况下我需要数字16

感谢评论,我意识到DateTime::diff()在几年,几个月和几天内以完整单位运作。

我通过将开始和结束日期设置为月份的第1天来解决了我的问题。所以现在我的函数返回两个日期之间的月份数,包括开始和结束月份。

function number_months($date1, $date2){
    $begin = new DateTime(date('Y-m-d', strtotime($date1)));
    $end = new DateTime(date('Y-m-d', strtotime($date2)));

    $begin->modify('first day of this month')->setTime(12, 00);
    $end->modify('first day of this month')->setTime(12, 00);

    $diff = $end->diff($begin);
    return ($diff->format('%y') * 12) + $diff->format('%m') + 1;
}