Отформатируйте значение даты и времени в 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'],
],
]); ?>