在 Yii 2 中设置日期时间值的格式

2022-08-31 00:29:15

保存在数据库中的日期时间值为 “”。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', ]`

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

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

更新

我为模型创建自定义属性以检索时间

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

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

解决

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


答案 1
\Yii::$app->formatter->asDatetime("2014-06-30 02:52:51.210201", "php:d-m-Y H:i:s");

第二个参数是您在 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");

答案 2

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

根据您使用的骨架应用程序(例如官方高级模板),然后将其添加到配置文件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',
],
?>

请参阅文档中的此处,了解可在格式化程序中使用的属性。

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

Yii::$app->formatter->asDate($yourDate);
Yii::$app->formatter->asDatetime($yourDatetime);
Yii::$app->formatter->asTime($yourTime);

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

'$yourDate:date',
'$yourDatetime:datetime',
'$yourTime:time',

推荐