从数据库中检索,计算并发布到视图

时间:2018-02-27 13:56:46

标签: php laravel

我想计算两个日期之间的差异,并将结果发布到视图中。该表包含以下行:

  

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,任何帮助都会很棒。

2 个答案:

答案 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"