web-dev-qa-db-ja.com

created_atおよびupdated_at値でデフォルトのフォーマットを変更する方法laravel

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

}

My 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();
}

私を助けてください。

27
saiful408

Postモデルに、次のような2つのアクセサーメソッドを追加します。

_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');
_
65
The Alpha
{{ $post->created_at }}

「2014-06-26 04:07:31」を返します

解決策は

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

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';
}
11
Loren

このように試すこともできます。

Use Carbon\Carbon;


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

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

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

Laravel 5.3でsimpleソリューションを探している場合:

  1. デフォルトのtimestamps()をそのまま保存します。つまり、 '2016-11-14 12:19:49'
  2. ビューで、フィールドを以下のように(または必要に応じて)フォーマットします。

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

私にとってはとてもうまくいきました。

2
Ndirangu Waweru

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
MR_AMDEV