Я новичок в Ларавеле. Я создаю приложение с 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('YmdH: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(); }
Пожалуйста помогите.
В вашей модели Post
добавьте два метода доступа, например:
public function getCreatedAtAttribute($date) { return Carbon\Carbon::createFromFormat('Ymd H:i:s', $date)->format('Ym-d'); } public function getUpdatedAtAttribute($date) { return Carbon\Carbon::createFromFormat('Ymd H:i:s', $date)->format('Ym-d'); }
Теперь каждый раз, когда вы используете эти свойства из своей модели, чтобы показать дату, они будут представлены по-разному, только дата без времени, например:
$post = Post::find(1); echo $post->created_at; // only Ymd formatted date will be displayed
Поэтому вам не нужно менять исходный тип в базе данных. для изменения type
в вашей базе данных вам необходимо изменить его на Date
from Timestamp
и вам нужно сделать это из своей миграции (если вы вообще используете) или непосредственно в вашу базу данных, если вы не используете миграцию. Метод timestamps()
добавляет эти поля (используя Migration) и для изменения этих полей во время миграции вам необходимо удалить метод timestamps()
и использовать date()
вместо, например:
$table->date('created_at'); $table->date('updated_at');
{{ $post->created_at }}
вернется '2014-06-26 04:07:31'
Решение
{{ $post->created_at->format('Ym-d') }}
Чтобы изменить время в базе данных, используйте: http://laravel.com/docs/4.2/eloquent#timestamps
Предоставление настраиваемого формата временной отметки
Если вы хотите настроить формат временных меток, вы можете переопределить метод getDateFormat в своей модели:
class User extends Eloquent { protected function getDateFormat() { return 'U'; } }
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'; }
Если кто-то ищет простое решение в Laravel 5.3:
В ваших представлениях отформатируйте поле, как показано ниже (или по мере необходимости):
date ('F d, Y', strtotime ($ list-> created_at))
Работал для меня очень хорошо.