Ответ 1
Попробуйте это,
array(
'name'=>'Date',
'header'=>'Date',
//'value'=>'date("d M Y",strtotime($data["work_date"]))'
'value'=>'Yii::app()->dateFormatter->format("d MMM y",strtotime($data->date))'
),
У меня был следующий cgridview в приложении Yii, Я хочу изменить формат даты в значении,
'columns'=>array(
array(
'name'=>'Date',
'header'=>'Date',
'value'=>'$data["work_date"]'
),
Я хочу показать дату в формате dd-mm-yyyy, в настоящее время она отображается как yyyy-mm-dd.
Попробуйте это,
array(
'name'=>'Date',
'header'=>'Date',
//'value'=>'date("d M Y",strtotime($data["work_date"]))'
'value'=>'Yii::app()->dateFormatter->format("d MMM y",strtotime($data->date))'
),
Я думаю, что есть более элегантный способ форматирования даты (или чего-то еще), чем тот, который предлагается в других ответах. CGridView
использует свойство formatter для указания компонента для форматирования значений. Он format
по умолчанию.
Итак, нужно настроить компонент format
в файле конфигурации приложения следующим образом:
'components' => array(
...
'format' => array(
'dateFormat' => 'd-m-Y'
)
)
Если work_date
уже является отметкой времени Unix, достаточно описать столбец в CGridView
следующим образом:
array(
'name' => 'work_date',
'type' => 'date'
)
Если work_date
как в вопросе, то массив столбцов:
array(
'name' => 'work_date',
'type' => 'date',
'value' => 'strtotime($data->work_date)'
)
Если у вас есть настраиваемое поле для форматирования, которое не поддерживается CFormatter, тогда легко добавить свой собственный type custom
, расширив CFormatter
:
class MyFormatter extends CFormatter
{
public function formatCustom($value)
{
// format $value parameter, i.e. make date conversion like in the question:
return date("d-m-Y", strtotime($value));
}
}
Затем конфигурация компонента форматирования:
'components' => array(
...
'format' => array(
'class' => 'MyFormatter'
)
)
И столбец описывается следующим образом:
array(
'name' => 'work_date',
'type' => 'custom'
)
Таким образом, не нужно беспокоиться о value выражении PHP каждый раз, когда вы хотите форматировать поле того же типа.
Есть (по крайней мере) два варианта:
(При использовании CGridView/CDetailView) вы можете отформатировать дату string (то есть: поле mysql datetime) вместо метки времени. Вы можете использовать это:
array(
'name' => 'startsOn',
'format' => 'datetime',
'value' => 'strtotime($data->startsOn)'
),
Или используйте это:
array(
'name' => 'startsOn',
'value' => 'Yii::app()->dateFormatter->format("d MMM y", strtotime($data->startsOn))'
),
Для Admin.php
array(
'name'=>'start_date',
'header'=>'Date',
'value'=>'date_format(date_create($data->start_date), "d-m-Y ")',
),
Для View.php
array(
'name'=>'Date',
'value'=>date_format(date_create($model->order_date), "d-m-Y "),
),
Я настоятельно рекомендую создать или изменить файл локализации на вашем целевом языке и ссылаться на него в вашем приложении вместо того, чтобы писать для него пользовательские функции без централизации формата. Пожалуйста, смотрите https://www.yiiframework.com/doc/guide/1.1/en/topics.i18n
// Refer our own locale file(s)
Yii::app()->setLocaleDataPath(Yii::getPathOfAlias('application.shared').'/i18n/data/');
Для фильтрации по локализованному столбцу даты/даты/времени в виде сетки, см. Мой ответ в "повторяющемся" вопросе: fooobar.com/info/5185435/...