La valeur datetime enregistrée dans la base de données est "2014-06-30 02:52:51.210201
".
C'est aussi la valeur affichée par Yii.
Quelle est la meilleure approche pour l’afficher partout sous la forme "30-06-2014 02:52:51
"?
J'ai trouvé ceci dans le wiki de Yii mais je ne sais pas comment l'utiliser:
Vous pouvez configurer yii\i18n\formateur pour contrôler vos formats de date globaux à afficher pour vos paramètres régionaux. Vous pouvez définir quelque chose comme ceci dans votre fichier de configuration auquel vous pouvez accéder via
'formatter' => [ 'class' => 'yii\i18n\Formatter', 'dateFormat' => 'd-M-Y', 'datetimeFormat' => 'd-M-Y H:i:s', 'timeFormat' => 'H:i:s', ]`
Ensuite, vous pouvez afficher vos heures de date n’importe où en utilisant les formats spécifiés par le formateur:
echo \Yii::t('app', 'Today is {0, date}', $yourTimeStampAttr);
UPDATE
Je crée un attribut personnalisé pour que le modèle récupère l'heure
public function getFormattedCreateTime()
{
return DateTime::createFromFormat('Y-m-d H:i:s.u', $this->create_time)->format('d-m-Y H:i:s');
}
autre problème cependant, comment utiliser cet attribut pour effectuer une recherche dans GridView de Yii 2? Merci
RÉSOLU
peut ajouter l'attribut personnalisé pour la recherche en hérite de la fonction de recherche
\Yii::$app->formatter->asDatetime("2014-06-30 02:52:51.210201", "php:d-m-Y H:i:s");
Le deuxième paramètre permet de définir un format personnalisé, comme spécifié dans le manuel ICU . Ou vous pouvez définir le format php date () avec le préfixe php:
.
Comme mentionné dans la documentation Yii2, les types de valeur suivants sont pris en charge:
Si vous avez une chaîne de date personnalisée, vous pouvez utiliser la fonction 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");
Vous avez vous-même trouvé la bonne solution en configurant le formateur dans la configuration.
En fonction de l'application squelette que vous avez utilisée (par exemple, un modèle avancé officiel), vous l'ajoutez à votre fichier de configuration main.php.
/votre-app/config/main.php
ou
/common/config/main.php
Devrait ressembler à ceci:
<?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',
],
?>
Voir ici dans la documentation pour les propriétés que vous pouvez utiliser dans le formateur.
Ensuite, dans votre application, vous pouvez utiliser le formateur sans chaînes de format.
Yii::$app->formatter->asDate($yourDate);
Yii::$app->formatter->asDatetime($yourDatetime);
Yii::$app->formatter->asTime($yourTime);
ou dans les widgets de données (comme GridView), utilisez la propriété "format"
'$yourDate:date',
'$yourDatetime:datetime',
'$yourTime:time',
si vous voulez montrer dans votre vue alors écrivez simplement votre code comme ceci
<?= DetailView::widget([
'model' => $model,
'attributes' => [
[
'label' => 'Modified Date',
'value' => date("d-M-Y h:i:s", strtotime($model->client_modified_date)),
]
],
]) ?>
sa montrer le format de jj-mm-aa h: i: s
Utilisation du plugin jQuery avec datepick et champ de saisie. Donc, sans widget résolu le problème de la manière suivante:
<?= $form->field($model, 'released_date')->textInput(['maxlenght' => 255, 'value' => date( 'd-M-Y', strtotime( $model->released_date ) )]); ?>
où $model->released_date
est une date au format timestamp mysql.
Si vous souhaitez simplement afficher la date et l'heure à partir de la valeur d'horodatage telle que created_at
, updated_at
alors!
GridView:
'created_at:datetime', // Jul 28, 2016, 8:29:38 PM
'updated_at:datetime', // Jul 28, 2016, 8:29:38 PM
Identique à DetailVeiw:
'created_at:datetime', // Jul 28, 2016, 8:29:38 PM
'updated_at:datetime', // Jul 28, 2016, 8:29:38 PM