Php 从数据库检索、计算并发布到视图
我想计算两个日期之间的差异,并将结果发布到视图中。该表包含以下行: Id、AuthorId、duedate、body 我知道如何计算两个日期之间的差异,但这只适用于一行。现在,我正在从数据库中提取多行,根据laravel的说法,我不应该在视图中执行任何计算 以下是来自控制器的信息:Php 从数据库检索、计算并发布到视图,php,laravel,Php,Laravel,我想计算两个日期之间的差异,并将结果发布到视图中。该表包含以下行: Id、AuthorId、duedate、body 我知道如何计算两个日期之间的差异,但这只适用于一行。现在,我正在从数据库中提取多行,根据laravel的说法,我不应该在视图中执行任何计算 以下是来自控制器的信息: public function index() { // $posts = Post::all(); $to = \Carbon\Carbon::now(); $from = \C
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]);
}
public function index()
{
$posts = Post::all();
return view('blog.index', compact('posts'));
}
我只是为$from变量使用了一个虚拟日期。应该用数据库中的到期日期值替换它。我不确定如何接近,以便在将其传递给视图之前在控制器中执行计算。
我仍在学习laravel,任何帮助都会很好。如果duedate是标准日期时间列,并且如果您已将duedate添加到阵列中:
如果不是,则为日期将自定义日期字符串转换为实例
然后,您可以在视图中执行此操作:
@foreach ($posts as $post)
{{ $post->duedate->diffInDays() }}
@endforeach
@foreach ($posts as $post)
{{ $post->duedate->diffForHumans() }}
@endforeach
如果duedate是标准日期时间列,并且您已将duedate添加到模型中的$dates数组中:
受保护的$dates=['duedate']
现在,duedate被强制转换为时间戳,因此您可以在此变量上使用Carbon\Carbon方法
让我们看看您在控制器中需要什么:
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]);
}
public function index()
{
$posts = Post::all();
return view('blog.index', compact('posts'));
}
然后,您可以在视图中执行此操作:
@foreach ($posts as $post)
{{ $post->duedate->diffInDays() }}
@endforeach
@foreach ($posts as $post)
{{ $post->duedate->diffForHumans() }}
@endforeach
在artisan tinker中测试:
天数:
工作时间:
>>> $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"
是否要计算创建帖子的时间?例如“3天前”?如果数据来自数据库,则使用例如DATEDIFF向结果中添加一列可能更容易获得两个日期之间的天数差。@jeroen我曾考虑过这样做,但这意味着我需要在每次通过时自动更新该列。这是最佳实践吗?你不应该计算这个。碳可以很容易地为你做到这一点。让我写一个答案,你应该只存储到期日,在例如mysql中,你可以选择*,DATEDIFF'due\u date',现在作为days\u due FROM。。。。与使用PHP相比,使用PHP更容易,而且可能效率更高。因此,您不需要更新数据库,而是在选择数据时进行计算。是的,duedate是标准的dateTime列,但我没有将其添加到日期中。因为我从数据库中检索了一堆行,我将如何将duedate添加到$dates数组?@user1783675如果您将其添加到模型中的数组中,则duedate属性将由Laravel自动转换为Carbon实例。默认情况下,Laravel对创建的和更新的列执行相同的操作。