laravel 如果不到1个月,则获得diffInDays;如果超过1个月,则获得diffInMonths

imzjd6km  于 2023-02-20  发布在  其他
关注(0)|答案(2)|浏览(290)

如果date1date2之间的范围小于1个月,我希望显示天数,如果大于1个月,我希望获得以月为单位的日期差。
我有一个类和函数,代码如下:

<?php

namespace App\Utility;

use Carbon\Carbon;

class DaysBetweenTwoDate
{
    public function count($start_date, $end_date)
    {
         $date1 = Carbon::parse($start_date);
         $date2 = Carbon::parse($end_date);

         if ('less than 1 month') {
            $result = $date1->diffInDays($date2);
         } else if ('more than 1 month') {
            $result = $date1->diffInMonths($date2);
         }
               
         return $result;
    }
}

我知道如果我想得到以天为单位的时差,我可以使用diffInDays,如果我想得到以月为单位的时差,我可以使用diffInMonths。但我不知道的是 * 如何检查date1date2之间的日期范围是大于还是小于1个月 *?

0s7z1bwu

0s7z1bwu1#

我需要做的只是检查diffInMonths的结果是大于1个月还是小于1个月。如果小于1个月,我只需要使用diffInDays来计算时差(以天为单位)。

<?php

namespace App\Utility;

use Carbon\Carbon;

class DaysBetweenTwoDate
{
    public function count($start_date, $end_date)
    {
         $date1 = Carbon::parse($start_date);
         $date2 = Carbon::parse($end_date);

        $result = $date1->diffInMonths($date2);

        if ($result == 0) {
            $result = $date1->diffInDays($date2);
        }
               
        return $result;
    }
}
ldioqlga

ldioqlga2#

您可以使用问题中提到的条件,如下所示

$result <= 0

在使用diffInMonths时,我们应该得到两个日期之间的差值。但是“二月”只有28天或29天,这会导致月份之间的差值错误。因此,我们需要使用精确浮点差值,通过floatDiffInMonths方法得到月份的精确差值,然后需要舍入该值并将其转换为整数,如以下代码所示。

<?php

    namespace App\Utility;

    use Carbon\Carbon;

    class DaysBetweenTwoDate
    {
        public function count($start_date, $end_date)
        {
            $date1 = Carbon::parse($start_date);
            $date2 = Carbon::parse($end_date);

            $result = (int)round($date1->floatDiffInMonths($date2))

            if ($result <= 0) {
                $result = $date1->diffInDays($date2);
            }
                
            return $result;
        }
    }

如果在上述情况下,date1date2的差值大于1个月,则将返回月份。
如果floatDiffInMonths的结果小于或等于0,则将检查diffInDays并返回2个日期之间的天数。

相关问题