首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在created_at和updated_at值处更改默认格式

如何在created_at和updated_at值处更改默认格式
EN

Stack Overflow用户
提问于 2014-06-27 06:44:22
回答 6查看 130.5K关注 0票数 39

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

代码语言:javascript
复制
2014-06-26 04:07:31
2014-06-26 04:07:31

但是我希望这个没有时间的值是这样的:

代码语言:javascript
复制
2014-06-26
2014-06-26

只有不带时间的日期。

有可能吗?

请帮帮我。

我的帖子模型:

代码语言:javascript
复制
<?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');
    }

}

我的Post Controller存储:

代码语言:javascript
复制
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();
}

请帮帮我。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-06-27 06:54:38

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

代码语言:javascript
复制
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');
}

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

代码语言:javascript
复制
$post = Post::find(1);
echo $post->created_at; // only Y-m-d formatted date will be displayed

因此,您不需要更改数据库中的原始类型。要更改数据库中的type,您需要将其从Timestamp更改为Date,并且需要在迁移(如果您正在使用)中更改,或者如果您没有使用迁移,则直接更改到数据库中。timestamps()方法添加这些字段(使用迁移),要在迁移期间更改这些字段,您需要删除timestamps()方法并改用date(),例如:

代码语言:javascript
复制
$table->date('created_at');
$table->date('updated_at');
票数 80
EN

Stack Overflow用户

发布于 2014-12-07 00:42:58

代码语言:javascript
复制
{{ $post->created_at }}

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

解决方案是

代码语言:javascript
复制
{{ $post->created_at->format('Y-m-d') }}
票数 70
EN

Stack Overflow用户

发布于 2014-11-15 03:44:01

Laravel 4.x和5.0

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

提供自定义时间戳格式

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

代码语言:javascript
复制
class User extends Eloquent {

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

}

Laravel 5.1+

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

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

代码语言:javascript
复制
class Flight extends Model
{
    /**
     * The storage format of the model's date columns.
     *
     * @var string
     */
    protected $dateFormat = 'U';
}
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24441395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档