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

sai*_*408 27 php timestamp eloquent laravel-4

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

2014-06-26 04:07:31
2014-06-26 04:07:31
Run Code Online (Sandbox Code Playgroud)

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

2014-06-26
2014-06-26
Run Code Online (Sandbox Code Playgroud)

只有没有时间的日期.

可能吗 ???

请帮我.

我的帖子模型:

<?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');
    }

}
Run Code Online (Sandbox Code Playgroud)

我的Post Controller商店:

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();
}
Run Code Online (Sandbox Code Playgroud)

请帮我.

The*_*pha 68

在您的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');
}
Run Code Online (Sandbox Code Playgroud)

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

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

因此,您无需更改数据库中的原始类型.改变type你的数据库,你需要将其更改为DateTimestamp,你需要从您的迁移做(如果你使用的话),或直接到你的数据库,如果你不使用迁移.该timestamps()方法添加这些字段(使用Migration)并在迁移期间更改这些字段,您需要删除该timestamps()方法并使用date(),例如:

$table->date('created_at');
$table->date('updated_at');
Run Code Online (Sandbox Code Playgroud)

  • 工作,但您不应该更改模型中的格式。你应该从你的视图里面做: $post-&gt;created_at-&gt;format('Ym-d'); 您还可以使用静态方法 Carbon\Carbon::setToStringFormat('Ym-d'); 全局更改每个日期的格式。 (2认同)
  • `Laravel`提供了一种方便的方法,可以从模型中进行,而不是在每个视图中使用它,这里没有什么不好,但还有其他方法,例如:使用`view presenter`类. (2认同)

Mag*_*mid 53

{{ $post->created_at }}
Run Code Online (Sandbox Code Playgroud)

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

解决方案是

{{ $post->created_at->format('Y-m-d') }}
Run Code Online (Sandbox Code Playgroud)


Lor*_*ren 11

Laravel 4.x和5.0

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

提供自定义时间戳格式

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

class User extends Eloquent {

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

}
Run Code Online (Sandbox Code Playgroud)

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';
}
Run Code Online (Sandbox Code Playgroud)


小智 8

你也可以这样试试。

Use Carbon\Carbon;


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

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

echo $date->format("Y-m-d");
Run Code Online (Sandbox Code Playgroud)


小智 8

你可以使用

protected $casts = [
    'created_at' => "datetime:Y-m-d\TH:iPZ",
];
Run Code Online (Sandbox Code Playgroud)

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


nwa*_*eru 5

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

  1. 让默认timestamps()保存为即 '2016-11-14 12:19:49'
  2. 在您的视图中,将字段格式化如下(或根据需要):

    date('F d, Y', strtotime($list->created_at))
    
    Run Code Online (Sandbox Code Playgroud)

它对我非常有效。