计算日期之间的月数

时间:2010-08-13 06:36:40

标签: php datetime

你如何计算两个任意日期之间的月数?鉴于即使只有一天是一个月,它也被视为整整一个月。

示例:

  • 2010-01-01 - 2010-03-31 =三个月
  • 2010-06-15 - 2010-09-01 =四个月

等等。我想只是将时间戳的差异除以2592000(一个月内的平均秒数),但这似乎很容易出错并容易出错。而且我想尽可能快地保持它(需要快速运行数千次),所以我猜使用strtotime也不是最佳的?

2 个答案:

答案 0 :(得分:7)

如果我正确地阅读你的问题,你会希望在1月31日和2月1日返回“2”,因为它跨越1月和2月,即使它们只相隔1天。

你可以解决(伪代码):

monthno1 = (date1_year * 12) + date1_month;
monthno2 = (date2_year * 12) + date2_month;

return (monthno2 - monthno1) + 1;

这假设第二个日期是更晚的日期。

答案 1 :(得分:1)

假设日期采用已知格式:

function getMonths($start, $end) {
    $startParsed = date_parse_from_format('Y-m-d', $start);
    $startMonth = $startParsed['month'];
    $startYear = $startParsed['year'];

    $endParsed = date_parse_from_format('Y-m-d', $end);
    $endMonth = $endParsed['month'];
    $endYear = $endParsed['year'];

    return ($endYear - $startYear) * 12 + ($endMonth - $startMonth) + 1;
}

这给出了:

print(getMonths('2010-01-01', '2010-03-31')); // 3
print(getMonths('2010-06-15', '2010-09-01')); // 4