簡體   English   中英

使用Laravel和Carbon更改日期輸出格式

[英]Change date output format, using Laravel and Carbon

MySQL數據庫以Ymd H:i:s2000-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的正確方法是通過定義一個訪問 :訪問者將自動雄辯嘗試檢索您的字段的值時被調用。 這意味着,你不必遍歷一組對象,然后轉換值,簡單地定義模型中的一個存取 ,你是好去。

解決方案1:

因此,對於您的日期字段,將以下方法添加到您的Orders Model

public function getCreatedAtAttribute($value)
{
    return $value->format('d/m/y H:i a');
}

訪問器的名稱應為getFieldAttribute ,在其中您將字段替換為相應的列名。 這樣,您就不必遍歷結果。

注意:切記,這樣做后,您現在在模型中不再將created_at作為字符串獲取,而不再是Carbon對象,那么這會對您有何影響? 如果您要在其他地方進行比較,也可以使用MutatorAccessors上設置更多字段值, Mutators可以在這里找到https://laravel.com/docs/5.1/eloquent-mutators

解決方案2:

是的,基本上循環遍歷所有數組並進行轉換。

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_atupdated_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM