我有 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
可以使用
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);
这是因为方法签名如下所示:
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
我最终使用了用户
@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