在Yii 2中格式化日期时间值

Edx*_*dxz 14 php yii2

保存在数据库中的日期时间值为" 2014-06-30 02:52:51.210201".

这也是Yii显示的值.

将它显示为" 30-06-2014 02:52:51"无处不在的最佳方法是什么?

Yii的wiki中找到了这个,但不知道如何使用它:

您可以配置yii\i18n\formatter来控制您的区域设置显示的全局日期格式.您可以在配置文件中设置可以访问的类似内容

'formatter' => [
 'class' => 'yii\i18n\Formatter',
 'dateFormat' => 'd-M-Y',
 'datetimeFormat' => 'd-M-Y H:i:s',
 'timeFormat' => 'H:i:s', ]`
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用格式化程序指定的格式在任何地方显示日期时间:

echo \Yii::t('app', 'Today is {0, date}', $yourTimeStampAttr);

UPDATE

我为模型创建了一个自定义属性来检索时间

public function getFormattedCreateTime()
{
    return DateTime::createFromFormat('Y-m-d H:i:s.u', $this->create_time)->format('d-m-Y H:i:s');
}
Run Code Online (Sandbox Code Playgroud)

另一个问题是,如何在Yii 2的GridView中使用此属性进行搜索?谢谢

解决了

可以通过继承搜索功能为搜索添加自定义属性

dmv*_*slv 19

\Yii::$app->formatter->asDatetime("2014-06-30 02:52:51.210201", "php:d-m-Y H:i:s");
Run Code Online (Sandbox Code Playgroud)

第二个参数允许您设置ICU手册中指定的自定义格式.或者你可以用前缀设置php date()格式php:.

如Yii2文档中所述,支持以下类型的值:

如果您有自定义日期字符串,则可以使用DateTime :: createFromFormat()函数:

$dateTime = \DateTime::createFromFormat("d/m/Y  H:i:s", '31/01/2015');
\Yii::$app->formatter->asDatetime($dateTime, "php:d-m-Y  H:i:s");
Run Code Online (Sandbox Code Playgroud)


mfg*_*cha 10

您自己找到了正确的解决方案,在配置中设置了格式化程序.

根据您使用的骨架应用程序(例如官方高级模板),然后将其添加到配置文件main.php中.

/your-app/config/main.php

要么

/common/config/main.php

应该是这样的:

<?php
return [
   'components' => [
       ...
       'formatter' => [
           'dateFormat' => 'd-M-Y',
           'datetimeFormat' => 'd-M-Y H:i:s',
           'timeFormat' => 'H:i:s',

           'locale' => 'de-DE', //your language locale
           'defaultTimeZone' => 'Europe/Berlin', // time zone
      ],
   ],
   // set target language
   'language' => 'de-DE',
],
?>
Run Code Online (Sandbox Code Playgroud)

有关可在格式化程序中使用的属性的文档,请参见此处.

然后在您的应用程序中,您可以使用没有格式字符串的格式化程

Yii::$app->formatter->asDate($yourDate);
Yii::$app->formatter->asDatetime($yourDatetime);
Yii::$app->formatter->asTime($yourTime);
Run Code Online (Sandbox Code Playgroud)

或者在数据小部件(如GridView)中使用"format"属性

'$yourDate:date',
'$yourDatetime:datetime',
'$yourTime:time',
Run Code Online (Sandbox Code Playgroud)