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

时间:2015-10-27 08:10:08

标签: php json date cakephp cakephp-3.0

我正在使用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结构?

3 个答案:

答案 0 :(得分:1)

选择date_transacted并在查询中将其格式化为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;        
}

答案 1 :(得分:1)

我不熟悉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);

答案 2 :(得分:1)

当您使用ORM获取记录时,它将date and time fields作为Cake\I18n\Time对象从Carbon延伸,而CarbonDateTime延伸}。您只需拨打i18nFormatformat方法。

  

引擎盖下,CakePHP使用Carbon为其Time实用程序供电。你可以用Carbon和DateTime做任何事情,你可以用Time做。   有关Carbon的详细信息,请参阅their documentation

CakePHP - Time

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