sai*_*408 27 php timestamp eloquent laravel-4
我是Laravel的新人.我正在使用laravel创建一个应用程序.当我创建一个帖子时,"created_at"和"updated_at"的值如下所示:
2014-06-26 04:07:31
2014-06-26 04:07:31
Run Code Online (Sandbox Code Playgroud)
但我希望这些值没有时间看起来像这样:
2014-06-26
2014-06-26
Run Code Online (Sandbox Code Playgroud)
只有没有时间的日期.
可能吗 ???
请帮我.
我的帖子模型:
<?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');
}
}
Run Code Online (Sandbox Code Playgroud)
我的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();
}
Run Code Online (Sandbox Code Playgroud)
请帮我.
The*_*pha 68
在您的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');
}
Run Code Online (Sandbox Code Playgroud)
现在,每当您使用模型中的这些属性来显示日期时,这些属性将以不同的方式呈现,只有没有时间的日期,例如:
$post = Post::find(1);
echo $post->created_at; // only Y-m-d formatted date will be displayed
Run Code Online (Sandbox Code Playgroud)
因此,您无需更改数据库中的原始类型.改变type你的数据库,你需要将其更改为Date从Timestamp,你需要从您的迁移做(如果你使用的话),或直接到你的数据库,如果你不使用迁移.该timestamps()方法添加这些字段(使用Migration)并在迁移期间更改这些字段,您需要删除该timestamps()方法并使用date(),例如:
$table->date('created_at');
$table->date('updated_at');
Run Code Online (Sandbox Code Playgroud)
Mag*_*mid 53
{{ $post->created_at }}
Run Code Online (Sandbox Code Playgroud)
将返回'2014-06-26 04:07:31'
解决方案是
{{ $post->created_at->format('Y-m-d') }}
Run Code Online (Sandbox Code Playgroud)
Lor*_*ren 11
要更改数据库使用时间:http: //laravel.com/docs/4.2/eloquent#timestamps
提供自定义时间戳格式
如果您希望自定义时间戳的格式,可以覆盖模型中的getDateFormat方法:
class User extends Eloquent {
protected function getDateFormat()
{
return 'U';
}
}
Run Code Online (Sandbox Code Playgroud)
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';
}
Run Code Online (Sandbox Code Playgroud)
小智 8
你也可以这样试试。
Use Carbon\Carbon;
$created_at = "2014-06-26 04:07:31";
$date = Carbon::parse($created_at);
echo $date->format("Y-m-d");
Run Code Online (Sandbox Code Playgroud)
小智 8
你可以使用
protected $casts = [
'created_at' => "datetime:Y-m-d\TH:iPZ",
];
Run Code Online (Sandbox Code Playgroud)
在您的模型类或此链接之后的任何格式https://www.php.net/manual/en/datetime.format.php
如果有人在 Laravel 5.3 中寻找简单的解决方案:
timestamps()保存为即 '2016-11-14 12:19:49'在您的视图中,将字段格式化如下(或根据需要):
date('F d, Y', strtotime($list->created_at))
Run Code Online (Sandbox Code Playgroud)它对我非常有效。