Отформатируйте значение даты и времени в Yii 2

Значение даты и времени, сохраняемое в базе данных, равно " 2014-06-30 02:52:51.210201 ".

Это также значение, отображаемое Yii.

Как лучше всего отображать его как " 30-06-2014 02:52:51 " везде?

Нашел это в вики Yii, но не знаю, как его использовать:

Вы можете настроить 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 формат даты() с префиксом 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

Вы нашли правильное решение самостоятельно, установив форматтер в config.

В зависимости от того, какое приложение скелета вы использовали (например, официальный расширенный шаблон), вы добавляете его в свой файл конфигурации 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',
],
?>

См. здесь, в документации для свойств, которые вы можете использовать в formatter.

Затем в вашем приложении вы можете использовать форматтер без форматирования.

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

или в виджетах данных (например, GridView) используется свойство "format"

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

Ответ 3

если вы хотите показать в своем представлении, просто напишите свой код следующим образом

<?= DetailView::widget([
    'model' => $model,
    'attributes' => [
     [ 
      'label' => 'Modified Date',
      'value' => date("d-M-Y h:i:s",  strtotime($model->client_modified_date)),
     ]
   ],
]) ?>

показывает формат dd-mm-yy h: i: s

Ответ 4

Использование jQuery плагина datepick и поля ввода. Таким образом, без решения проблемы с виджетами следующий путь:

<?= $form->field($model, 'released_date')->textInput(['maxlenght' => 255, 'value' => date( 'd-M-Y', strtotime( $model->released_date ) )]); ?>

где $model->released_date - дата в timestamp формата mysql.

Ответ 5

Если вы просто хотите показать дату и время с отметкой времени, например created_at, updated_at, тогда!

GridView:

'created_at:datetime', // Jul 28, 2016, 8:29:38 PM
'updated_at:datetime', // Jul 28, 2016, 8:29:38 PM

То же, что DetailVeiw:

'created_at:datetime', // Jul 28, 2016, 8:29:38 PM
'updated_at:datetime', // Jul 28, 2016, 8:29:38 PM

Ответ 6

просто используйте это внутри вашего виджета GridView

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

например

<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'columns' => [
            'id',
            '$yourDate:date',
['class' => 'yii\grid\ActionColumn'],
        ],
    ]); ?>