【发布时间】:2020-10-15 13:55:05
【问题描述】:
我设法解决了我之前的问题,即计算从due_date 到今天的剩余天数。我目前面临的问题是即使due_date 已经通过,但仍在计算不同的日子。假设我想让输出类似于Overdue。为了更清楚,我展示了下面的例子:
对于第三个,假设剩余天数应该为负数或显示Overdue,因为今天的日期是 2020 年 10 月 15 日。我认为其他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
【问题讨论】:
-
你不认为你需要将
parse($c->due_date)->diffInDays($c->created_at)区别于created_at而不是now().? -
添加 false 作为第二个参数, echo $dt->diffInDays($dt->copy()->subMonth(), false); // -31 它将以负数返回天数。
-
created_at是居民提出投诉的日期。承包商只有 30 天(已经在到期日存储)来修复缺陷。我使用now()是因为我想提醒承包商看看今天日期和due_date之间还剩多少天。你明白我的意思吗? @KamleshPaul -
所以在我的情况下我需要做
{{ \Carbon\Carbon::parse($c->due_date)->diffInDays(now(), false) }}? @AnuratChapanond -
这能回答你的问题吗? Laravel and Carbon - DiffInDays If Statement
标签: php laravel php-carbon