如何在这个json结构中从日期中删除时间信息


How to remove time information from date in this json structure?

我使用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扩展,CarbonDateTime扩展。您可以直接调用i18nFormatformat方法。

在引擎盖下,CakePHP使用Carbon来驱动其时间实用程序。任何你可以用Carbon和DateTime做的事情,你也可以用Time做。有关Carbon的详细信息,请参阅他们的文档。

CakePHP - Time

$date_transacted->format('Y-m-d');