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
我想比较 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