Laravel和Carbon - DiffInDays If Statement

时间:2017-12-22 20:01:20

标签: php laravel laravel-5 php-carbon

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

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

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

如果那些虚假的地方我想宣布,如果将来这一天,比如明天和今天相比,我将返回-1,而如果我提到昨天,我会有1返回。

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

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

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

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

2 个答案:

答案 0 :(得分:5)

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

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

或者:

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

取决于你想要达到的目的。

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

答案 1 :(得分:0)

您可以使用:

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

如果您想为此类添加一些自定义方法。