Подтвердить что ты не робот

Yii, показать другой формат даты в cgridview

У меня был следующий cgridview в приложении Yii, Я хочу изменить формат даты в значении,

'columns'=>array(
        array(
                'name'=>'Date',
                'header'=>'Date',
                'value'=>'$data["work_date"]'
            ),

Я хочу показать дату в формате dd-mm-yyyy, в настоящее время она отображается как yyyy-mm-dd.

4b9b3361

Ответ 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))'
),

Ответ 2

Я думаю, что есть более элегантный способ форматирования даты (или чего-то еще), чем тот, который предлагается в других ответах. 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 каждый раз, когда вы хотите форматировать поле того же типа.

Ответ 3

Есть (по крайней мере) два варианта:

(При использовании 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))'
),

Ответ 4

Для 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 "),
    ),

Ответ 5

Я настоятельно рекомендую создать или изменить файл локализации на вашем целевом языке и ссылаться на него в вашем приложении вместо того, чтобы писать для него пользовательские функции без централизации формата. Пожалуйста, смотрите 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/...