Как изменить формат по умолчанию при создании и обновлении по значению 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();
}

Пожалуйста, помогите мне.

Author: saiful408, 2014-06-27

4 answers

В вашей модели 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');
 54
Author: The Alpha, 2014-06-26 22:59:51
{{ $post->created_at }}

Вернется '2014-06-26 04:07:31'

Решение

{{ $post->created_at->format('Y-m-d') }}
 38
Author: Maged Hamid, 2014-12-06 16:42:58

Laravel 4.x и 5.0

Чтобы изменить время в базе данных, используйте: http://laravel.com/docs/4.2/eloquent#timestamps

Предоставление Пользовательского Формата Метки Времени

Если вы хотите настроить формат ваших временных меток, вы можете переопределить метод getDateFormat в вашей модели:

class User extends Eloquent {

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

}

Ларавель 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
Author: Loren, 2017-11-15 13:36:16

Если кто-то ищет простое решение в Laravel 5.3:

  1. Пусть значение по умолчанию timestamps() будет сохранено как есть, т.е. '2016-11-14 12:19:49'
  2. В своих представлениях отформатируйте поле следующим образом (или по мере необходимости):

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

Для меня это сработало очень хорошо.

 1
Author: Ndirangu Waweru, 2018-09-04 01:06:13