Laravel日期演员表

Laravel date cast

提问人:Surya Neupane 提问时间:6/20/2023 更新时间:6/20/2023 访问量:87

问:

您好,我想使用 Laravel 默认投射功能,如果我访问后模型created_at属性。我希望从以下代码中获得以下输出:

法典:

$timepassed = $post->created_at;

期望输出:

2 hours ago

laravel 文档仅提供了日期的强制转换示例,即:

protected $casts = [
'created_at' => 'datetime:Y-m-d',
];

所以当我访问$post->created_at时,上面的演员表会输出“2023-06-20”。

我的问题是我应该用什么代替“datetime:Y-m-d”来获得输出,例如:“2小时前”

php laravel 铸造 php-carbon 访问器

评论


答:

2赞 linktoahref 6/20/2023 #1

一种方法是使用访问器而不是使用强制转换。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    /**
     * Get the created at value.
     *
     * @param  Carbon  $value
     * @return string
     */
    public function getCreatedAtAttribute($value)
    {
        return $value->diffForHumans();
    }
}
2赞 Karl Hill 6/20/2023 #2

使用 Carbon 库。

composer require nesbot/carbon

use Illuminate\Support\Carbon;

class Post extends Model
{
    // ...

    public function getCreatedAtAttribute($value)
    {
        return Carbon::parse($value)->diffForHumans();
    }
}
0赞 Shoukat Mirza 6/20/2023 #3

要获得所需的输出,您可以在后期模型上指定属性转换。create_at

确保在Laravel项目中安装了Carbon库。您可以通过运行以下命令来安装它:

composer require nesbot/carbon

帖子模型上的属性强制转换:

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $casts = [
        'created_at' => 'datetime',
    ];
}

定义此强制转换后,访问该属性将返回 Carbon 实例,从而允许您根据需要对其进行格式化。要获取“2 小时前”格式,您可以使用 Carbon 提供的方法。created_atdiffForHumans()

例:

$post = Post::find(1);
$post->created_at->diffForHumans();