[英]Change date output format, using Laravel and Carbon
MySQL數據庫以Ymd H:i:s
即2000-12-32 00:00:00
格式,UTC)存儲時間。
我想知道是否有某種方法可以轉換從數據庫返回的$order
對象上的created_at dateTime屬性,因此它會像這樣發送dateTime
字符串給客戶端: 31/04/16 14:25pm
並且沒有秒。
for($i = 0; $i < sizeof($orders); $i++ ) {
$orders[$i]->created_at = $orders[$i]->created_at->format('d/m/y H:i');
}
這樣使用Laravel的正確方法是通過定義一個訪問 :訪問者將自動雄辯嘗試檢索您的字段的值時被調用。 這意味着,你不必遍歷一組對象,然后轉換值,簡單地定義模型中的一個存取 ,你是好去。
因此,對於您的日期字段,將以下方法添加到您的Orders Model
public function getCreatedAtAttribute($value)
{
return $value->format('d/m/y H:i a');
}
訪問器的名稱應為getFieldAttribute
,在其中您將字段替換為相應的列名。 這樣,您就不必遍歷結果。
注意:切記,這樣做后,您現在在模型中不再將created_at作為字符串獲取,而不再是Carbon對象,那么這會對您有何影響? 如果您要在其他地方進行比較,也可以使用Mutator在Accessors上設置更多字段值, Mutators可以在這里找到https://laravel.com/docs/5.1/eloquent-mutators
是的,基本上循環遍歷所有數組並進行轉換。
for($i = 0; $i < count($orders); $i++ ) {
$orders[$i]->created_at = $orders[$i]->created_at->format('d/m/y H:i a');
}
如果遇到諸如“找不到分隔符”或“找到意外數據”之類的錯誤。 調整這樣的解決方案:
解決方案1:
public function getCreatedAtAttribute($value)
{
return Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $value->toDateTimeString())->format('d/m/y H:i a');
}
解決方案2:
for($i = 0; $i < count($orders); $i++ ) {
$orders[$i]->created_at = Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $orders[$i]->created_at->toDateTimeString())->format('d/m/y H:i a');
}
是的,您可以在時間格式化created_
foreach($orders as $order){
echo $order->created_at->format('d/m/y H:i a');
}
假設$orders
是一個雄辯的模型,則created_at
和updated_at
屬性將自動轉換為carbon實例,因此您已經可以在它們上運行carbon方法。
請參閱有關此主題的文檔: https : //laravel.com/docs/5.2/eloquent-mutators#date-mutators
因此,您的代碼:
$orders[$i]->created_at->format('d/m/y H:i');
應該工作正常!
您總是可以在Order
模型中添加一個輔助方法,使其也更具可讀性,如下所示:
public function createdAtTimeStamp()
{
return $this->created_at->format('d/m/y H:i');
}
然后您可以像這樣訪問它:
$orders[$i]->createdAtTimeStamp()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.