PHP Carbon:如果小时差小于 24 小时,如何获取 diffInDays?

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

我有 2 个不同的日期,相差不到 24 小时。当我尝试计算天数差异时,我得到 0

$end = 2022-09-07 02:20:47  
$now = 2022-09-06 16:00:00 
$diffDays = $end ->diffInDays($now , false); // return 0
$diffDays = $now->diffInDays($end, false); // return 0

如何检测这又是一天,并且应将 diffInDays 返回为 1 而不是 0

php laravel php-carbon
3个回答
0
投票

可以使用

diffInHours() < 24
,也可以与
diffInMinutes < 60
混合使用。如果是其中任何一个,则返回 1。但是,我建议删除 Absolute = false 标志来执行此操作,因为负数总是会命中这些检查。

$end = Carbon::parse('2022-09-07 02:20:47')  ;
$now = Carbon::parse('2022-09-06 16:00:00');

// These will return 10
$diffHours = $end->diffInHours($now);
$diffHours = $now->diffInHours($end);

// These return 620
$diffMinutes = $end->diffInMinutes($now);
$diffMinutes = $now->diffInMinutes($end);

0
投票

这是因为方法签名如下所示:

public function diffInDays(Carbon $dt = null, $abs = true)
{
    $dt = $dt ?: static::now($this->getTimezone());

    return (int) $this->diff($dt, $abs)->format('%r%a');
}

因此,如果低于 24 小时,它将四舍五入到较低值 (0)。

也许你想尝试

floatDiffInDays
来看看十进制的不同? 请参阅下面的示例,

echo Carbon::parse('2000-01-01 12:00')->floatDiffInDays('2000-02-11 06:00');     // 40.75

0
投票

我最终使用了用户

@user3532758
提到的功能startOfDay()

唯一重要的区别是,我使用

clone()
来防止实例发生变异。

$end = Carbon::parse('2022-09-07 02:20:47');
$now = Carbon::parse('2022-09-06 16:00:00');

$diffCalendarDays1 = $end->clone()->startOfDay()->diffInDays($now); // return 1
$diffCalendarDays2 = $now->clone()->startOfDay()->diffInDays($end); // return 1
© www.soinside.com 2019 - 2024. All rights reserved.