2017-01-30 8 views
0

У меня есть простой вопрос, так как я просто хочу преобразовать время (в формате массива) в строку времени 24 часа. Проблема: я получаю время от ввода пользователя и помещает его в объект массива, который форматирование не работает. Я не смог найти ответ от https://book.cakephp.org/3.0/en/core-libraries/time.html#conversiontime array converson cakephp3

time format inputted from a form 
'start_time' => [ 
     'hour' => '02', 
     'minute' => '00', 
     'meridian' => 'pm' 
    ], 

view// 
    echo $this->Form->input('start_time', ['label' => 'Class Start Time','type' => 'time', 
        'interval' => 5,'timeFormat'=>12,'value'=>$startTime,]); 



//controller 
     if ($this->request->is('post')) { 

     debug($this->request->data['start_time']->i18nFormat('HH:mm:ss'));//cant use on an array 



    //this works but is there a better way 
$startTime = $this->request->data['start_time']['hour'].":".$this->request->data['start_time']['minute']." ". 
         $this->request->data['start_time']['meridian']; 
       $this->request->data['start_time'] = date("H:i:s", strtotime($startTime)); 
       debug($this->request->data); 

ответ

1

Вы должны создать Time экземпляра, потому что $this->request->data['start_time'] не отформатированный:

use Cake\I18n\Time; 
... 
$StartTimeHour = $this->request->data['start_time']['hour']; 
$StartTimeMinute = $this->request->data['start_time']['minute']; 
$StartTimeMeridian = $this->request->data['start_time']['meridian']; 

$time = new Time("${StartTimeHour}:${StartTimeMinute} ${StartTimeMeridian}"); 

echo $time->i18nFormat('HH:mm:ss'); 

* Протестировано и работает.

+0

ok Я вижу, что вы сделали, и это отличный ответ, но как это значительно отличается от моего решения. – jagguy

+0

Если вы выполните исследование litle, вы получите тот же ответ, нет волшебного пути. Дело в том, что следуйте соглашениям и используйте фреймворк, встроенный в утилиты. Чтобы получить форматированные данные без повторения кода, создайте _Virtual Field_ на вашем Entity ('_getStartTime()'), поэтому каждый раз, когда вы вызываете $ entity-> start_time, вы получаете отформатированный час без изменения его в базе данных. –