我使用cakephp v3。
我有一个简单的模型函数;
public function getXXXoutput($xxx_term, $start_date, $end_date)
{
$monthly_XXX_curves = TableRegistry::get('MonthlyXXXCurves');
$query = $monthly_XXX_curves
->find()
->select( ['date_transacted', 'output'] )
->toArray();
return $query;
}
控制器函数是这样的;
public function apiGetXXX()
{
$json_output = $this->MonthlyXXXCurves->getXXXoutput($xxx_term, $start_date, $end_date);
echo json_encode($json_output);
}
控制器返回的json格式如下;
[
{
output: 1.37,
date_transacted: "2015-01-01T00:00:00+0000"
},
{
output: 1.62,
date_transacted: "2015-02-01T00:00:00+0000"
}
]
我想从date_transacted
中删除时间信息,使最终的json结构看起来像这样;
[
{
output: 1.37,
date_transacted: "2015-01-01"
},
{
output: 1.62,
date_transacted: "2015-02-01"
}
]
如何修改控制器功能以实现所需的json结构?
在查询中选择date_transaction并格式化为DATE
public function getXXXoutput($xxx_term, $start_date, $end_date)
{
$monthly_XXX_curves = TableRegistry::get('MonthlyXXXCurves');
$query = $monthly_XXX_curves
->find()
->select(['transacted' => 'DATE(date_transacted)', 'output'])
->toArray();
return $query;
}
我不熟悉CakePHP,所以不知道这是如何处理的。我所知道的是$json_output
是一个数组,因此可以循环和修改。
foreach ($json_output as $key => $value) {
$date = new DateTime($json_output[$key]['date_transacted']);
$json_output[$key]['date_transacted'] = $date->format('Y-m-d');
}
在前面加上以上内容:
echo json_encode($json_output);
当您使用ORM
获取记录时,它会将date and time fields
作为Cake'I18n'Time
对象从Carbon
扩展,Carbon
从DateTime
扩展。您可以直接调用i18nFormat
或format
方法。
在引擎盖下,CakePHP使用Carbon来驱动其时间实用程序。任何你可以用Carbon和DateTime做的事情,你也可以用Time做。有关Carbon的详细信息,请参阅他们的文档。
CakePHP - Time
$date_transacted->format('Y-m-d');