如何更改laravel的created_at和updated_at值的默认格式

问题描述 投票:0回答:14

我是 Laravel 的新手。我正在使用 laravel 创建一个应用程序。当我创建帖子时,“created_at”和“updated_at”的值如下所示:

2014-06-26 04:07:31
2014-06-26 04:07:31

但我希望没有时间的值看起来像这样:

2014-06-26
2014-06-26

只有日期,没有时间。

可以吗???

请帮助我。

我的帖子模型:

<?php

class Post extends \Eloquent {

    protected $fillable = array('title', 'body', 'meta','reporter', 'slug', 'image','top');

    public static $rules = array(
        'title'=>'required|min:2',
        'body'=>'required|min:20',
        'reporter'=> 'required|min:2',
        'image'=>'image|mimes:jpeg,jpg,bmp,png,gif'
    );

    public function categories()
    {
        return $this->belongsToMany('Category');
    }

}

我的帖子控制器商店:

public function store()
{
    $validator = Validator::make(Input::all(), Post::$rules);

    if ($validator->passes()) {
        $post = new Post;
        $post->title = Input::get('title');
        $post->body = Input::get('body');
        $post->reporter = Input::get('reporter');
        $post->meta = Input::get('meta');
        $post->slug = Input::get('title');
        $post->top = Input::get('top');

        $image = Input::file('image');
        if ($image) {
            $filename = date('Y-m-d-H:i:s')."-".$image->getClientOriginalName();
            Image::make($image->getRealPath())->resize(250, 145)->save('public/images/postimages/'.$filename);
            $post->image = 'images/postimages/'.$filename;
        }


        $categories = Input::get('categories');

        $post->save();

        $post->categories()->sync($categories);

        return Redirect::route('admin.posts.index')
            ->with('message', 'Product Created');
    }

    return Redirect::back()
        ->with('message', 'Something went wrong')
        ->withErrors($validator)
        ->withInput();
}

请帮助我。

php laravel-4 timestamp eloquent
14个回答
90
投票

在您的

Post
模型中添加两个访问器方法,如下所示:

public function getCreatedAtAttribute($date)
{
    return Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $date)->format('Y-m-d');
}

public function getUpdatedAtAttribute($date)
{
    return Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $date)->format('Y-m-d');
}

现在,每次您使用模型中的这些属性来显示日期时,这些属性都会以不同的方式显示,只是不带时间的日期,例如:

$post = Post::find(1);
echo $post->created_at; // only Y-m-d formatted date will be displayed

所以你不需要改变数据库中的原始类型。要更改数据库中的

type
,您需要将其从
Date
更改为
Timestamp
,并且需要从迁移中执行此操作(如果您使用的话)或直接进入数据库(如果您不使用迁移)。
timestamps()
方法添加这些字段(使用迁移),并且要在迁移期间更改这些字段,您需要删除
timestamps()
方法并使用
date()
代替,例如:

$table->date('created_at');
$table->date('updated_at');

77
投票
{{ $post->created_at }}

将返回 '2014-06-26 04:07:31'

解决办法是

{{ $post->created_at->format('Y-m-d') }}

13
投票

Laravel 4.x 和 5.0

要更改数据库中的时间,请使用: http://laravel.com/docs/4.2/eloquent#timestamps

提供自定义时间戳格式

如果您希望自定义时间戳的格式,您可以覆盖模型中的 getDateFormat 方法:

class User extends Eloquent {

    protected function getDateFormat()
    {
        return 'U';
    }

}

Laravel 5.1+

https://laravel.com/docs/5.1/eloquent

如果您需要自定义时间戳的格式,请在模型上设置 $dateFormat 属性。此属性确定日期属性如何存储在数据库中,以及模型序列化为数组或 JSON 时的格式:

class Flight extends Model
{
    /**
     * The storage format of the model's date columns.
     *
     * @var string
     */
    protected $dateFormat = 'U';
}

9
投票

你也可以这样尝试。

Use Carbon\Carbon;


$created_at = "2014-06-26 04:07:31";

$date = Carbon::parse($created_at);

echo $date->format("Y-m-d");

8
投票

你可以使用

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

在你的模型类中 或此链接后的任何格式https://www.php.net/manual/en/datetime.format.php


7
投票

如果有人正在 Laravel 5.3 中寻找简单解决方案:

  1. 让默认值

    timestamps()
    按原样保存,即“2016-11-14 12:19:49”

  2. 在您的视图中,按如下方式设置字段格式(或根据需要):

     date('F d, Y', strtotime($list->created_at))
    

2
投票

无论您的前端是什么,在 Laravel 9+ 中,强制转换是执行此操作的正确方法; Blade、Vue、React...变量将被正确处理。

/**
 * The attributes that should be cast.
 *
 * @var array
 */
protected $casts = [
    'created_at' => 'datetime:Y-m-d',
    'updated_at' => 'datetime:Y-m-d',
    'json' => 'object',
    'active' => 'boolean',
];

https://laravel.com/docs/9.x/eloquent-mutators#date-casting


1
投票

在 Laravel 8 到 10

设定时

protected $timeStamps = 'Y-m-d H:i:s';

这仅在您

update
create

时生效

但是当你

get/fetch
从一个雄辩的 该格式始终具有带时区的时间戳,这是默认值

样品:

2023-06-14T06:27:18.000000Z

// on your Model.php

use use DateTimeInterface;
protected function serializeDate(DateTimeInterface $date): string
{
    return $date->format('Y-m-d H:i:s');
}

每次您使用 Eloquent 查询

timestamps
(如果启用)现在将具有
Y-m-d H:i:s
格式

如果您希望它对所有模型都有效,只需使用以下

BaseModel
创建一个
property
然后扩展所有模型

阅读更多内容Laravel 10 - 日期转换


0
投票

laravel 6最新的可以轻松添加到“APP/user.php”模型中:

/**
 * The storage format of the model's date columns.
 *
 * @var string
 */
protected $dateFormat = 'U';

在架构中可以添加

    $table->integer('created_at')->nullable();
    $table->integer('updated_at')->nullable();

0
投票

使用碳\碳;

$targetDate =  "2014-06-26 04:07:31";
Carbon::parse($targetDate)->format('Y-m-d');

0
投票

对于较新版本的 laravel,您只需在模型中声明它,如下所示:

class Your_class_name extends Model {

    protected $dateFormat = 'Y-m-d';

    ...


}

0
投票

最简单的方法就是直接在blade文件中进行操作

$post->created_at->format('Y-m-d')

0
投票

在构建函数中使用,如

date_format($eachNotification->created_at,'d-M-Y');


-1
投票

LARAVEL 9^
在你的模型中添加这个。

use Carbon\Carbon;

protected $dates = ['created_at','updated_at'];

protected function serializeDate(DateTimeInterface $dates)
{
    //return Carbon::createFromFormat('Y-m-d H:i:s', $dates)->diffForHumans();
    OR
    //return Carbon::createFromFormat('Y-m-d H:i:s', $dates)->format('Y-m-d');
}
© www.soinside.com 2019 - 2024. All rights reserved.