微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel Carbon使用diffInDays和now

如何解决Laravel Carbon使用diffInDays和now

我设法解决了之前的问题,该问题计算了从due_date到今天为止的剩余天数。我目前面临的问题是即使due_date已经通过,但仍在计算不同的日子。假设我想使输出类似Overdue。为了更清楚,我显示以下示例:

enter image description here

对于第三个日期,假定剩余日期应为负数或显示Overdue,因为今天的日期是2020年10月10日。我认为其他2是正确的吗?那我该如何解决呢?

投诉表

id
defect_id
created_at (date)
due_date (date)
updated_at (timestamp)

投诉控制器

public function store(Request $request)
    {
        if (count($request->defect_id) > 0) {
            foreach($request->defect_id as $item=>$v) {
                $data = array(    
                    'defect_id' => $request->defect_id[$item],'created_at' => Carbon::today()->toDateString(),'due_date' => Carbon::today()->addDays(30),'updated_at' => Carbon::Now()->toDateTimeString(),);

                Complaint::insert($data);
            }
        }
        return redirect('/report-form')->with('success','Your report is submitted!');

index.blade.PHP

<div class="panel-heading">
   <h3 class="panel-title"><strong>Pending Report</strong></h3>
</div>
<div class="panel-body">
    <table class="table table-hover" id="report-table">
        <thead>
           <tr>
              <th>Types of Defect</th>
              <th>Report Date</th>
              <th>Due Date</th>
              <th>Days Left</th>
              <th></th>
           </tr>
        </thead>
        @foreach($complaint as $c)
           <tr>
              <td>{{$c->defect->name}}</td>
              <td>{{$c->created_at->format("d/m/yy")}}</td>
              <td>{{date('d/m/yy',strtotime($c->due_date))}}</td>
              @if( \Carbon\Carbon::parse($c->due_date)->diffInDays(Now()) <= 10 && \Carbon\Carbon::parse($c->due_date)->diffInDays(Now()) > 0 )
                  <td class="text-danger">{{ \Carbon\Carbon::parse($c->due_date)->diffInDays(Now()) }} days</td>
              @elseif( \Carbon\Carbon::parse($c->due_date)->diffInDays(Now()) > 10)
                  <td class="text-success">{{ \Carbon\Carbon::parse($c->due_date)->diffInDays(Now()) }} days</td>
              @else
                  <td class="text-danger">Overdue</td>
              @endif
              <td><a href="/report/{{$c->id}}/view" class="btn btn-primary">View</a></td>
           </tr>
        @endforeach
    </table>
</div>

模型中没有为date声明任何内容。我希望有人教我一个人做我需要做的事情。

-更新-

@if( \Carbon\Carbon::parse($c->due_date)->diffInDays(Now()) <= 10 && \Carbon\Carbon::parse($c->due_date)->diffInDays(Now()) > 0 )
    <td class="text-danger">{{ \Carbon\Carbon::parse($c->due_date)->diffInDays(Now()) }} days</td>
 @elseif( \Carbon\Carbon::parse($c->due_date)->diffInDays(Now()) > 10)
    <td class="text-success">{{ \Carbon\Carbon::parse($c->due_date)->diffInDays(Now()) }} days</td>
@elseif( \Carbon\Carbon::parse($c->due_date)->diffInDays(Now()) < 0)
    <td class="text-success">{{ \Carbon\Carbon::parse($c->due_date)->diffInDays(Now(),false) }} days</td>
@endif

解决方法

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

$c->due_date->diffInDays(now(),false); // -29

或者,

now()->diffInDays($c->due_date,false); // 29

false作为第二个参数使该方法返回带符号的值()。如果没有此参数,diffInDays()将返回正值

示例

$i = $data->created_at; // 2020-10-21 11:31:37
$q = $i->diffInDays(now(),false); // now() = 2020-10-15 16:40:49
dd($q); // -6
,

您可以尝试通过稍微分离逻辑来使其变得更整洁。

使用isPast()diffForHumans()碳方法。

然后根据事先确定的逻辑使用三元和if语句。

类似的东西:

@foreach($complaint as $c)
    @php
        $dueDate = \Carbon\Carbon::parse($c->due_date);
        $dueSoon = $dueDate->diffInDays(now()) <= 10 && $dueDate->diffInDays(now()) > 0;
        $isPast = $dueDate->isPast();
    @endphp
    <tr>
        <td>{{$c->defect->name}}</td>
        <td>{{$c->created_at->format("d/m/yy")}}</td>
        <td>{{date('d/m/yy',strtotime($c->due_date))}}</td>
        <td class="{{ ($isPast || $dueSoon) ? 'text-danger' : 'text-success' }}">
            @if($isPast)
                Overdue
            @else
                {{ $dueDate->diffForHumans() }}
            @endif
        </td>
        <td><a href="/report/{{$c->id}}/view" class="btn btn-primary">View</a></td>
    </tr>
@endforeach

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?