我想计算两个日期之间的差异,并将结果发布到视图中。该表包含以下行:
Id,AuthorId,duedate,body
我知道如何计算两个日期之间的差异,但这是针对单行的。现在,我从数据库中拉出多行,根据laravel,我不应该在视图中执行任何计算。
以下是来自控制器:
public function index()
{
//
$posts = Post::all();
$to = \Carbon\Carbon::now();
$from = \Carbon\Carbon::createFromFormat('Y-m-d H:s:i', '2015-5-6 9:30:34');
$diff_in_days = $to->diffInDays($from);
return view('blog.index',['posts'=>$posts,'diffdays'=>$diff_in_days]);
}
我刚用了$from
变量的虚拟日期。它应该被替换为来自数据库的到期日期值。我不知道如何接近,所以我可以在将控制器传递给视图之前在控制器中执行计算
我还在学习laravel,任何帮助都会很棒。
答案 0 :(得分:2)
如果duedate
是标准dateTime
列,并且您已将duedate
添加到$dates
数组:
protected $dates = ['duedate', 'created_at', 'updated_at'];
如果不是,create an accessor表示将自定义日期字符串转换为Carbon实例的日期。
然后你可以在视图中执行此操作:
@foreach ($posts as $post)
{{ $post->duedate->diffInDays() }}
@endforeach
答案 1 :(得分:2)
如果duedate
是标准的dateTime列,并且您已将duedate添加到模型中的$dates
数组中:
protected $dates = ['duedate'];
现在duedate
被转换为时间戳,因此您可以对此变量使用Carbon \ Carbon方法。
让我们在控制器中看到你需要的东西:
public function index()
{
$posts = Post::all();
return view('blog.index', compact('posts'));
}
然后你可以在视图中执行此操作:
@foreach ($posts as $post)
{{ $post->duedate->diffForHumans() }}
@endforeach
在工匠修补匠中进行测试:
天:
>>> $now = Carbon\Carbon::now()->addWeek()
=> Carbon\Carbon @1520345864 {#814
date: 2018-03-06 15:17:44.571132 Europe/Budapest (+01:00),
}
>>> $now->diffForHumans();
=> "6 days from now"
时间:
>>> $now = Carbon\Carbon::now()->addDay()
=> Carbon\Carbon @1519827379 {#811
date: 2018-02-28 15:16:19.447731 Europe/Budapest (+01:00),
}
>>> $now->diffForHumans();
=> "23 hours from now"