【问题标题】:Laravel blade compare two dateLaravel 刀片比较两个日期
【发布时间】:2017-07-17 03:01:09
【问题描述】:

我想比较两个日期。所以我在我的模板刀片中创建了一个这样的条件:

@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

它在日期不小于变量 $contract->date_facturation 的日期 25/02/2018 上添加红色背景

你对问题有什么想法吗?

谢谢

【问题讨论】:

    标签: laravel blade


    【解决方案1】:

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

    Carbon::format() 返回一个字符串。您应该将日期转换为 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,这样您就无需每次都需要在视图中解析日期。

    【讨论】:

      【解决方案2】:

      比较刀片模板中的日期

      我用的是Carbon这个方法:

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

      More Details

      【讨论】:

        【解决方案3】:

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

        <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。在这种情况下,您不需要解析日期。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-09-01
          • 2013-11-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多