我必须计算两个日期之间的持续时间并将其结果为年、月和日期格式,但它在一个月内返回额外的一两天,我无法找到问题所在
开始日期 - 01-03-2024
结束日期 - 31-03-2024
持续时间 - 1 个月零 2 天(额外的两天是错误的)
用于计算的函数
function getDuration($startDate, $endDate)
{
if (empty($startDate) || empty($endDate)) {
return '';
}
$startDateTime = new DateTime($startDate);
$endDateTime = new DateTime($endDate);
$endDateTime->modify('+1 day');
$interval = $startDateTime->diff($endDateTime);
$duration = '';
if ($years = $interval->y) {
$duration .= "$years year" . ($years > 1 ? 's' : '') . ', ';
}
if ($months = $interval->m) {
$duration .= "$months month" . ($months > 1 ? 's' : '') . ', ';
}
if ($days = $interval->d) {
$duration .= "$days day" . ($days > 1 ? 's' : '');
}
return rtrim($duration, ', ');
}
我想我使用的是较低版本的PHP,所以DateTime对象不能按预期工作,所以我用新的逻辑来管理,将所有转换为秒
function getDuration($startDate, $endDate)
{
if (empty($startDate) || empty($endDate)) {
return '';
}
$startDateTime = new DateTime($startDate);
$endDateTime = new DateTime($endDate);
$endDateTime->modify('+1 day');
$interval = $startDateTime->diff($endDateTime);
$duration = '';
if ($years = $interval->y) {
$duration .= "$years year" . ($years > 1 ? 's' : '') . ', ';
}
if ($months = $interval->m) {
$duration .= "$months month" . ($months > 1 ? 's' : '') . ', ';
}
if ($days = $interval->d) {
$duration .= "$days day" . ($days > 1 ? 's' : '');
}
return rtrim($duration, ', ');
}