[英]Laravel 5 return datetime with timezone
我正在構建一個API,我希望將所有時間戳(如created_at,deleted_at,...等)作為復雜對象(包括實際日期時間,還包括時區)返回。 我已在控制器中使用{Carbon / Carbon}。 我也在模型中定義了我的日期字段。 當我訪問控制器中的日期字段時,我實際上獲得了Carbon對象。 但是當我將結果集作為JSON返回時,我只看到日期時間字符串。 不是時區。
目前的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
}
知道我在這里缺少什么嗎?
您可以嘗試在模型中添加這樣的函數:
public function getAuthDateAttribute() {
return [
"datetime" => "2015-05-27 12:31:13",
"timezone" => "UTC+2"
];}
這是因為所有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']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.