Как изменить формат по умолчанию на created_at и update_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();
}
Пожалуйста, помогите мне.
Ответы
Ответ 1
В вашей модели 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()
добавляет эти поля (используя Migration) и для изменения этих полей во время миграции вам нужно удалить метод timestamps()
и использовать вместо него date()
, например:
$table->date('created_at');
$table->date('updated_at');
Ответ 2
{{ $post->created_at }}
вернется '2014-06-26 04:07:31'
Решение
{{ $post->created_at->format('Y-m-d') }}
Ответ 3
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 date columns.
*
* @var string
*/
protected $dateFormat = 'U';
}
Ответ 4
Вы также можете попробовать вот так.
Use Carbon\Carbon;
$created_at = "2014-06-26 04:07:31";
$date = Carbon::parse($created_at);
echo $date->format("Y-m-d");
Ответ 5
Если кто-то ищет простое решение в Laravel 5.3:
- Пусть
timestamps()
умолчанию timestamps()
сохраняются как есть, то есть "2016-11-14 12:19:49" -
В ваших представлениях отформатируйте поле, как показано ниже (или по необходимости):
date('F d, Y', strtotime($list->created_at))
Это сработало для меня очень хорошо для меня.
Ответ 6
В laravel 6 последнюю версию можно легко добавить в модель "APP/user.php":
/**
* The storage format of the model date columns.
*
* @var string
*/
protected $dateFormat = 'U';
А в схему можно добавить
$table->integer('created_at')->nullable();
$table->integer('updated_at')->nullable();