在 php 中创建日期->差异时如何包含开始日期

How to include the startdate when create the date->diff in php

如何包括开始日期。当你计算天数时,它会忽略第一天,但​​我也想包括第一天。

$d1 = '2018-02-01 00:00:00';
$d2 = '2018-02-05 00:00:00';

function timeDifference($dT1, $dT2){
    $d1 = new DateTime($dT1);
    $d2 = new DateTime($dT2);
    $d = $d1->diff($d2);
    $total = $d->days;
    $month = $d->m.' months';
    $days = $d->d.' days';
    if ($total > 30) {
        $returnDate = $month.' '.$days;
    }
    else {
        $returnDate = $days;
    }
    return $returnDate;
}

echo timeDifference($d1, $d2); // 4 (i want 5)

函数按预期运行。在日期 2018-02-01 00:00:00 和日期 2018-02-05 00:00:00 之间实际上有 4 天(01、02、03、04)。
第五个不算,因为日期2018-02-05 00:00:00算上限

如果您希望您的函数 returns 5 而不是 4,请在其中添加增量或在右侧输入日期 2018-02-06 00:00:00.

好吧,01. 和 05. 之间相差四天,它没有忽略任何东西。你为什么不那样做呢?

€dit:请注意,如果日期差异超过一个月(例如 30 天 +1 = 31,但该月只有 30 天...),这仍然会出错...)

<?PHP
$d1 = '2018-02-01 00:00:00';
$d2 = '2018-02-05 00:00:00';

function timeDifference($dT1, $dT2){
    $d1 = new DateTime($dT1);
    $d2 = new DateTime($dT2);
    $d = $d1->diff($d2);
    $total = $d->days;
    $month = $d->m.' months';
    $dayDifference = $d->d;
    if($dayDifference !== 0)
    {
        $dayDifference++;
    }
    $days = $dayDifference.' days';

    if ($total > 30) {
        $returnDate = $month.' '.$days;
    }
    else {
        $returnDate = $days;
    }
    return $returnDate;
}

echo timeDifference($d1, $d2);
?>

2:

<?PHP
$d1 = '2018-02-01 00:00:00';
$d2 = '2018-02-05 00:00:00';

function timeDifference($dT1, $dT2){
    $d1 = new DateTime($dT1);
    $d1->sub(new DateInterval("P1D"));
    $d2 = new DateTime($dT2);
    $d = $d1->diff($d2);
    $total = $d->days;
    $month = $d->m.' months';
    $days = $d->d.' days';
    if ($total > 30) {
        $returnDate = $month.' '.$days;
    }
    else {
        $returnDate = $days;
    }
    return $returnDate;
}

echo timeDifference($d1, $d2);
?>