php 中的持续时间计算不正确

问题描述 投票:0回答:1

我必须计算两个日期之间的持续时间并将其结果为年、月和日期格式,但它在一个月内返回额外的一两天,我无法找到问题所在

开始日期 - 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 duration
1个回答
0
投票

我想我使用的是较低版本的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, ', ');
}
© www.soinside.com 2019 - 2024. All rights reserved.