日期时间(月)之间的差值计算函数
Function for difference calculation between datetime (months)
我的目标是计算两个日期之间的月数,包括开始月份。
我正在使用这个函数来计算。
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
函数returns:
15
应该是16
。我错过了什么?我在 Whosebug 上研究过这里,尝试了提供代码的各种实现,但问题仍然存在。
谢谢。
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->format('%y') * 12) + $diff->format('%m') + 1 = 1*12 + 2 + 1 = 15;
是真的。
问题在于用户将设置项目的开始和结束日期。我需要为项目将要设置的每个月创建一个输入。所以在这种情况下我需要数字 16
。
感谢评论,我意识到 DateTime::diff()
在涉及年、月和日时可以使用完整的单位。
我通过将开始日期和结束日期设置为每月 1 日解决了我的问题。所以现在我的函数 returns 两个日期之间的月数,包括开始和结束月份。
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;
}
我的目标是计算两个日期之间的月数,包括开始月份。
我正在使用这个函数来计算。
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
函数returns:
15
应该是16
。我错过了什么?我在 Whosebug 上研究过这里,尝试了提供代码的各种实现,但问题仍然存在。
谢谢。
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->format('%y') * 12) + $diff->format('%m') + 1 = 1*12 + 2 + 1 = 15; 是真的。
问题在于用户将设置项目的开始和结束日期。我需要为项目将要设置的每个月创建一个输入。所以在这种情况下我需要数字 16
。
感谢评论,我意识到 DateTime::diff()
在涉及年、月和日时可以使用完整的单位。
我通过将开始日期和结束日期设置为每月 1 日解决了我的问题。所以现在我的函数 returns 两个日期之间的月数,包括开始和结束月份。
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;
}