Laravel 和 Carbon - DiffInDays If 语句

Laravel and Carbon - DiffInDays If Statement

我想我有一个相对简单的问题,我只是觉得我误解了它的一个方面。

我有一个索引页,其中 table 个单元格中有一个 if 语句:

 @if (Carbon\Carbon::parse($shipment->due_date)->diffInDays(false) > 0 && Carbon\Carbon::parse($shipment->due_date)->diffInDays(false) < 10)

错误的地方是我想声明的地方,如果那一天是未来,比如说明天与今天相比,我将得到 -1 returned,而如果我指的是昨天,我将有 1 returned.

问题是我正在尝试使用这些文档,但无论我以何种方式尝试它们,它们都在为我排队:http://carbon.nesbot.com/docs/#api-humandiff

但是我应该提到,在相同的布局上我可以这样做:

{{Carbon\Carbon::parse($shipment->due_date)->diffInDays()}}

和 return 过去或未来的天数(即使两者都是正数)所以我知道上面的工作原理(在某种程度上,但我仍然需要提到正数或负数)。

您需要提供 Carbon 日期作为 diffInDays() 的第一个参数。因此,逻辑将是:

Carbon\Carbon::parse($shipment->due_date)->diffInDays(now(), false)

或者:

now()->diffInDays(Carbon\Carbon::parse($shipment->due_date), false)

取决于您要实现的目标。

false 作为第二个参数使方法 return 有符号值(正或负)。

您可以使用:

Carbon\Carbon::parse($shipment->due_date)->diffInDays(null, false)

代替

Carbon\Carbon::parse($shipment->due_date)->diffInDays(false)

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

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

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

另外看你的逻辑我觉得太复杂了。我认为使用就足够了:

@if (Carbon\Carbon::parse($shipment->due_date)->diffInDays(null, false) < 10)

我认为第一个条件不是必须的

此外,如果您使用 Laravel 5.5,您应该使用:

Illuminate\Support\Carbon

而不是

Carbon\Carbon

以防您想为此添加一些自定义方法 class。