問題描述
我在 Laravel 中構建了一個應用程序,并以這種格式 eloquent 返回日期:2015-04-17 00:00:00
.我正在向 JSON 發送一個特定查詢,以便我可以使用 D3 制作圖表,并且我想我想要 ISO8601 ('1995-12-17T03:24:00'
) 中的日期或一些與 javascript Date() 構造函數配合使用的其他格式.
I've built an application in Laravel and eloquent returns dates in this format: 2015-04-17 00:00:00
. I'm sending one particular query to JSON so I can make a graph with D3, and I think I would like the dates in ISO8601 ('1995-12-17T03:24:00'
) or some other format that plays nice with the javascript Date() constructor.
有沒有辦法在 Laravel 端將輸出的日期格式更改為 JSON?我不確定使用 mutator 是最好的方法,因為它會影響我應用程序其他部分的日期.
Is there a way to change the date format being output to JSON on the Laravel end? I'm not sure using a mutator is the best approach because it would affect the date in other parts of my application.
或者最好保留 JSON 輸出,并在將日期格式傳遞給 Date() 構造函數之前使用一些 javascript 字符串方法來操作日期格式?哪種方法更有效?
Or would it be better to leave the JSON output as is, and use some javascript string methods to manipulate the date format before passing it to the Date() constructor? Which approach is more efficient?
這是我的模型:
class Issue extends Model {
protected $fillable = [
'client_id',
'do',
'issue_advocate',
'service_number',
'issue_location',
'issue_description',
'level_of_service',
'outcome',
'referral_id',
'file_stale_date',
'date_closed',
'issue_note',
'staff_hours'
];
protected $dates = [
'do',
'date_closed',
'file_stale_date'
];
public function setDoAttribute($value)
{
$this->attributes['do'] = Carbon::createFromFormat('F j, Y', $value)->toDateString();
}
}
這是我的查詢:
$issues = Issue::with('issuetypes')
->select(['do','level_of_service','outcome','id'])
->whereBetween('do',[$lastyear,$now])
->get()->toJson();
以及我返回的 JSON:
And the JSON I get back:
[{"do":"2014-12-23 00:00:00","level_of_service":1,"outcome":1,"id":18995,"issuetypes":[{"id":9,"issuetype":"Non Liberty","pivot":{"issue_id":18995,"issuetype_id":9}}]}]
推薦答案
我知道這是一個老問題,但仍然沒有好的答案.更改protected $dateFormat
會影響數據庫,而必須重寫方法serializeDate()
I know it's an old question, but there is still no good answer to that.
Changing protected $dateFormat
will affect database, instead method serializeDate()
must be overriden
class MyModel extends Eloquent {
protected function serializeDate(DateTimeInterface $date) {
return $date->getTimestamp();
}
}
或者我自己我選擇創造特質
Or myself I chose to create trait
trait UnixTimestampSerializable
{
protected function serializeDate(DateTimeInterface $date)
{
return $date->getTimestamp();
}
}
然后添加
class SomeClassWithDates extends Model {
use UnixTimestampSerializable;
...
}
這篇關于如何將 Laravel 輸出的日期格式更改為 JSON?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!