3

我在 Laravel 4 中制作我的网站,并且我在表格中有created_at&updated_at字段。我想制作一个新闻系统,让我知道自从发布帖子以来已经过去了多少时间。

|    name    |    text    |        created_at        |      updated_at     |
| __________ | __________ | ________________________ | ___________________ |
| news name  | news_text  |   2013-06-12 11:53:25    | 2013-06-12 11:53:25 |

我想展示类似的东西:

- 创建于 5 分钟前

- 创建于 5 个月前

如果帖子超过 1 个月

-创建于 2012 年 11 月 5 日

4

2 回答 2

11

尝试使用。Laravel 已经将其作为依赖项提供,因此您无需添加它。

use Carbon\Carbon;

// ...

// If more than a month has passed, use the formatted date string
if ($new->created_at->diffInDays() > 30) {
    $timestamp = 'Created at ' . $new->created_at->toFormattedDateString();

// Else get the difference for humans
} else {
    $timestamp = 'Created ' $new->created_at->diffForHumans();
}

根据要求,我将举一个完全集成的示例,说明我认为如何更好地做到这一点。首先,我假设我可能会在几个不同的地方、几个不同的视图上使用它,所以最好的办法是在你的模型中包含该代码,这样你就可以从任何地方方便地调用它,没有任何麻烦。

Post.php

class News extends Eloquent {

    public $timestamps = true;

    // ...

    public function formattedCreatedDate() {
        ìf ($this->created_at->diffInDays() > 30) {
            return 'Created at ' . $this->created_at->toFormattedDateString();
        } else {
            return 'Created ' . $this->created_at->diffForHumans();
        }
    }

}

然后,在您的视图文件中,您只需执行$news->formattedCreatedDate(). 例子:

<div class="post">
    <h1 class="title">{{ $news->title }}</h1>
    <span class="date">{{ $news->forammatedCreatedDate() }}</span>
    <p class="content">{{ $news->content }}</p>
</div>
于 2013-06-12T23:27:19.960 回答
4

需要碳:

use Carbon\Carbon;

并使用它:

$user = User::find(2);

echo $user->created_at->diffForHumans( Carbon::now() );

你应该得到这个:

19 days before
于 2013-06-12T23:31:23.220 回答