web-dev-qa-db-fra.com

Comment changer le format par défaut aux valeurs created_at et updated_at laravel

Je suis nouveau à Laravel. Je crée une application avec laravel. Lorsque je crée un article, les valeurs de "created_at" et "updated_at" ressemblent à ceci:

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

Mais je veux que ces valeurs sans temps ressemblent à ceci:

2014-06-26
2014-06-26

Seulement date sans heure.

C'est possible ???

Aidez-moi, s'il vous plaît.

Mon modèle de message:

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

}

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

Aidez-moi, s'il vous plaît.

27
saiful408

Dans votre modèle Post, ajoutez deux méthodes d'accesseur comme celle-ci:

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

Maintenant, chaque fois que vous utilisez ces propriétés de votre modèle pour afficher une date, celles-ci seront présentées différemment, juste la date sans l'heure, par exemple:

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

Vous n'avez donc pas besoin de changer le type d'origine dans la base de données. pour changer le type dans votre base de données, vous devez le changer en Date de Timestamp et vous devez le faire à partir de votre migration (si vous l'utilisez) ou directement dans votre base de données si vous n'utilisez pas la migration. La méthode timestamps() ajoute ces champs (à l'aide de la migration) et pour modifier ces champs pendant la migration, vous devez supprimer la méthode timestamps() et utiliser à la place date(), par exemple :

$table->date('created_at');
$table->date('updated_at');
65
The Alpha
{{ $post->created_at }}

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

La solution est

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

Laravel 4.x et 5.0

Pour modifier l'heure dans la base de données, utilisez: http://laravel.com/docs/4.2/eloquent#timestamps

Fournir un format d'horodatage personnalisé

Si vous souhaitez personnaliser le format de vos horodatages, vous pouvez remplacer la méthode getDateFormat dans votre modèle:

class User extends Eloquent {

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

}

Laravel 5.1+

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

Si vous devez personnaliser le format de vos horodatages, définissez la propriété $ dateFormat sur votre modèle. Cette propriété détermine comment les attributs de date sont stockés dans la base de données, ainsi que leur format lorsque le modèle est sérialisé en tableau ou JSON:

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

Vous pouvez également essayer comme ça.

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

Si quelqu'un cherche une solution simple dans Laravel 5.3:

  1. Laissez la timestamps() par défaut être enregistrée telle quelle, c'est-à-dire '2016-11-14 12:19:49'
  2. Dans vos vues, formatez le champ comme ci-dessous (ou comme requis):

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

Cela a très bien fonctionné pour moi.

2
Ndirangu Waweru

Dans laravel 6 le dernier peut facilement être ajouté dans le modèle "APP/user.php":

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

Et dans le schéma on peut ajouter

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