2015-07-12 60 views
7

我正在構建一個API,並且想將所有時間戳記像created_at,deleted_at等等作爲複雜對象包括實際日期時間以及時區返回。 我已經在我的控制器中使用{Carbon/Carbon}。我也在模型中定義了我的日期字段。 當我訪問控制器中的日期字段時,我實際上獲取了碳對象。但是當我將結果集作爲JSON返回時,我只能看到日期時間字符串。不是時區。Laravel 5返回帶時區的日期時間

當前JSON

{ 
    "id": 4, 
    "username": "purusScarlett93", 
    "firstname": null, 
    "lastname": null, 
    "language_id": 1, 
    "pic": null, 
    "email": null, 
    "authtoken": "f54e17b2ffc7203afe345d947f0bf8ceab954ac4f08cc19990fc41d53fe4eef8", 
    "authdate": "2015-05-27 12:31:13", 
    "activation_code": null, 
    "active": 0, 
    "devices": [], 
    "sports": [] 
} 

我的願望:)

{ 
    "id": 4, 
    "username": "purusScarlett93", 
    "firstname": null, 
    "language_id": 1, 
    "pic": null, 
    "email": null, 
    "authtoken":"f54e17b2ffc7203afe41d53fe4eef8", 
    "authdate": [ 
    { 
     "datetime": "2015-05-27 12:31:13", 
     "timezone": "UTC+2" 
    } 
    ], 
    "activation_code": null, 
    "active": 0 
} 

任何想法,我在這裏失蹤?

+0

我相信你可以改變你的authdate存取做到這一點,但要注意這將改變你的日期在整個應用程序中的訪問。對於特定API調用的更具體的更改,您可以在控制器中處理此問題,也可以通過顯示類來處理碳對象並生成2項數組。 – alariva

回答

0

這是因爲所有Carbon對象具有被觸發__toString()功能,當您嘗試將對象轉換爲字符串(即JSON )。嘗試查看是否可以在模型上創建自己的存取器,該存取器爲您提供自定義數組而不是字符串。

public function getAuthdateAttribute(Carbon $authdate) { 
    return [ 
      'datetime' => $authdate->toDateTimeString(), 
      'timezone' => 'UTC' . $authdate->offsetHours 
      ]; 
} 

隨着用戶Alariva指出,這種方法將覆蓋訪問authdate的默認方式;所以如果你想訪問你的原始Carbon對象,也許你必須爲此創建一個特殊的方法。

或者你可能是一個有點聰明,做這樣的事情:

public function getAuthdateAttribute(Carbon $authdate) { 
    return [ 
      'datetime' => $authdate, 
      'timezone' => 'UTC' . $authdate->offsetHours 
      ]; 
} 

然後訪問原始對象:$carbon = $this->authdate['datetime']

0

你可以嘗試添加這樣的函數模型裏面:

public function getAuthDateAttribute() { 
    return [ 
    "datetime" => "2015-05-27 12:31:13", 
    "timezone" => "UTC+2" 
];} 
相關問題