我是 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();
}
请帮助我。
在您的
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');
{{ $post->created_at }}
将返回 '2014-06-26 04:07:31'
解决办法是
{{ $post->created_at->format('Y-m-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';
}
你也可以这样尝试。
Use Carbon\Carbon;
$created_at = "2014-06-26 04:07:31";
$date = Carbon::parse($created_at);
echo $date->format("Y-m-d");
你可以使用
protected $casts = [
'created_at' => "datetime:Y-m-d\TH:iPZ",
];
在你的模型类中 或此链接后的任何格式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))
无论您的前端是什么,在 Laravel 9+ 中,强制转换是执行此操作的正确方法; Blade、Vue、React...变量将被正确处理。
/**
* The attributes that should be cast.
*
* @var array
*/
protected $casts = [
'created_at' => 'datetime:Y-m-d',
'updated_at' => 'datetime:Y-m-d',
'json' => 'object',
'active' => 'boolean',
];
在 Laravel 8 到 10
设定时
protected $timeStamps = 'Y-m-d H:i:s';
这仅在您
update
或 create
时生效
但是当你
get/fetch
从一个雄辩的
该格式始终具有带时区的时间戳,这是默认值
样品:
2023-06-14T06:27:18.000000Z
// on your Model.php
use use DateTimeInterface;
protected function serializeDate(DateTimeInterface $date): string
{
return $date->format('Y-m-d H:i:s');
}
每次您使用 Eloquent 查询
timestamps
(如果启用)现在将具有 Y-m-d H:i:s
格式
如果您希望它对所有模型都有效,只需使用以下
BaseModel
创建一个 property
然后扩展所有模型
阅读更多内容Laravel 10 - 日期转换
在laravel 6最新的可以轻松添加到“APP/user.php”模型中:
/**
* The storage format of the model's date columns.
*
* @var string
*/
protected $dateFormat = 'U';
在架构中可以添加
$table->integer('created_at')->nullable();
$table->integer('updated_at')->nullable();
使用碳\碳;
$targetDate = "2014-06-26 04:07:31";
Carbon::parse($targetDate)->format('Y-m-d');
对于较新版本的 laravel,您只需在模型中声明它,如下所示:
class Your_class_name extends Model {
protected $dateFormat = 'Y-m-d';
...
}
最简单的方法就是直接在blade文件中进行操作
$post->created_at->format('Y-m-d')
在构建函数中使用,如
date_format($eachNotification->created_at,'d-M-Y');
LARAVEL 9^
在你的模型中添加这个。
use Carbon\Carbon;
protected $dates = ['created_at','updated_at'];
protected function serializeDate(DateTimeInterface $dates)
{
//return Carbon::createFromFormat('Y-m-d H:i:s', $dates)->diffForHumans();
OR
//return Carbon::createFromFormat('Y-m-d H:i:s', $dates)->format('Y-m-d');
}