你如何计算两个任意日期之间的月数?鉴于即使只有一天是一个月,它也被视为整整一个月。
示例:
2010-01-01 - 2010-03-31
=三个月2010-06-15 - 2010-09-01
=四个月等等。我想只是将时间戳的差异除以2592000(一个月内的平均秒数),但这似乎很容易出错并容易出错。而且我想尽可能快地保持它(需要快速运行数千次),所以我猜使用strtotime
也不是最佳的?
答案 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