Laravel blade 比较两个日期

Laravel blade compare two date

我想比较 2 个日期。所以我在我的模板中创建了这样的条件 blade:

@if(\Carbon\Carbon::parse($contrat->date_facturation)->format('d/m/Y') < $dateNow)
    <td class="danger">
        {{ \Carbon\Carbon::parse($contrat->date_facturation)->format('d/m/Y') }}
    </td>
@else
    <td>
        {{ \Carbon\Carbon::parse($contrat->date_facturation)->format('d/m/Y') }}
    </td>
@endif

我的变量 $dateNow 与 $contract->date_facturation

中的值具有相同的格式

Screenshot

在25/02/2018日期不小于变量$contract->date_facturation

时添加红色背景

你对问题有什么想法吗?

谢谢

您可以解析这两个日期,将您的代码更改为:

<td class="{{ Carbon\Carbon::parse($contrat->date_facturation) < Carbon\Carbon::parse($dateNow) ? 'danger' : '' }}">
    {{ \Carbon\Carbon::parse($contrat->date_facturation)->format('d/m/Y') }}
</td>

或者,您可以使用 date mutators。在这种情况下,您不需要解析日期。

问题是您正在尝试比较两个日期字符串。 PHP不知道如何比较日期字符串。

Carbon::format() returns 一个字符串。您应该将日期转换为 Carbon 对象(使用解析)并使用 Carbon 的比较方法,如 Carbon Docs (Comparison).

中所述

对于您的示例,您应该这样做:

// Note that for this work, $dateNow MUST be a carbon instance.
@if(\Carbon\Carbon::parse($contrat->date_facturation)->lt($dateNow))
    <td class="danger">
        {{ \Carbon\Carbon::parse($contrat->date_facturation)->format('d/m/Y') }}
    </td>
@else
    <td>
        {{ \Carbon\Carbon::parse($contrat->date_facturation)->format('d/m/Y') }}
    </td>
@endif

而且你的代码看起来重复,假设$dateNow是一个带有当前日期的变量,你可以使用Carbon::isPast()方法,所以重写你的代码,它变成:

@php($date_facturation = \Carbon\Carbon::parse($contrat->date_facturation))
@if ($date_facturation->isPast())
    <td class="danger">
@else
    <td>
@endif
        {{ $date_facturation->format('d/m/Y') }}
    </td>

这可以减少您的代码重复并提高速度,因为您只解析一次日期,而不是两次。

此外,如果您希望您的代码更好,请使用 Eloquent's Date Mutators,这样您就不需要在视图中每次需要时都解析日期。

比较 blade 模板中的日期

我用的是Carbon的这个方法:

@foreach($earnings as $data)

@if($data->created_at ==  Carbon\Carbon::today())
      <tr class="alert alert-success">
@else
      <tr>
@endif
  ....
@endforeach

More Details