Yii,在cgridview中显示不同的日期格式

时间:2012-06-15 14:11:55

标签: php yii

我在Yii应用程序中有以下cgridview, 我想在值中更改日期格式,

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

我想以格式dd-mm-yyyy显示日期,目前显示为yyyy-mm-dd。

5 个答案:

答案 0 :(得分:27)

试试这个,

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))'
),

答案 1 :(得分:5)

我想有更优雅的方式来格式化日期(或其他任何东西),而不是其他答案中提出的方式。 CGridView使用formatter属性指定应用程序的component to format values。默认为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不支持的自定义字段格式,则可以通过扩展custom轻松添加自己的type 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表达式。

答案 2 :(得分:2)

有(至少)两个选项:

(使用CGridView / CDetailView时)您可能希望格式化日期字符串(即: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))'
),

答案 3 :(得分:0)

适用于Admin.php

time_diff(updated_at, created_at) #just example

适用于View.php

array(
        'name'=>'start_date',
        'header'=>'Date',
        'value'=>'date_format(date_create($data->start_date), "d-m-Y ")',
    ),

答案 4 :(得分:0)

我强烈建议创建或更改目标语言的本地化文件,并在应用程序中引用它,而不是在不集中格式的情况下为其编写自定义函数。请参阅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/');

要对gridview中的本地化日期/日期时间列进行过滤,请在“重复”问题中查看我的答案:https://stackoverflow.com/a/53759001/3090890