laravel7 的更改時間格式和以前不太一樣了
如果不重新格式化時間,結果是這樣的
$list = $this->orderBy('addtime','desc')->where('status',0)->get();
var_dump($list->toArray());
{
"status": 0,
"data": [
{
"id": 1,
"title": "這是第一個標題",
"description": "這是第一個標題",
"addtime": "2020-06-12T03:18:28.000000Z",
"updatetime": "2020-06-12T03:18:28.000000Z"
}
]
}
可以看到,addtime 和updatetime都是 一種laravel7 默認的時間格式化方式,在此不得不吐槽下,laravel蛇精病呀,管的真寬,老子想格式化啥樣就啥樣,稀罕你這麼格式化了?
自定義格式化
方法一:
重寫並覆蓋 serializeDate 方法 (有個麻煩的地方,6.x版本及之前,不是這樣,laravel 7版本每個類都要寫一份,因爲只對當前類有效)
// 引用格式化時間的命名空間
use DateTimeInterface;
// 在類裏面直接重新寫一個方法,覆蓋原有的格式化方法
class Question extends Model
{
/**
........ 類裏面的其他代碼
*/
/*
* 時間格式化
*/
protected function serializeDate(DateTimeInterface $date){
return $date->format('Y-m-d');
}
}
方法二:
類裏面定義 $casts 變量 ,效果和上面的那個差不多(同樣,只對當前類有效)
protected $casts = [
'updatetime' => 'datetime:Y-m-d H:i:s',
'addtime' => 'datetime:Y-m-d H:i:s',
];
剩下的就是手動重新把時間通過 strtotime 給還原爲時間戳,然後自定義格式化