2014-06-29 6 views
11

La valeur de date/heure enregistrée dans la base de données est "2014-06-30 02:52:51.210201".Formatage de la valeur de date/heure dans Yii 2

Ceci est également la valeur affichée par Yii.

Quelle est la meilleure approche pour l'afficher comme "30-06-2014 02:52:51" partout?

trouvé cela dans Yii's wiki mais ne savent pas comment l'utiliser:

Vous pouvez configurer yu \ i18n \ formatter pour contrôler votre date mondiale pour l 'affichage pour vos paramètres régionaux. Vous pouvez définir quelque chose comme ceci dans votre fichier de configuration que vous pouvez accéder à travers

'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 temps de date à l'aide n'importe où les formatter formats spécifiés:

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

MISE À JOUR

créer un attribut personnalisé pour le modèle pour récupérer le temps

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

un autre problème cependant, comment puis-je utiliser cet attribut pour la recherche dans GridView de 2 Yii? grâce

RESOUDRE

peut ajouter l'attribut personnalisé pour la recherche par la fonction hérite de recherche

+0

Que millisecondes sont nécessaires pour vous en général? – frops

+0

@frops: c'est le format par défaut dans les postgres – Edxz

+0

Wiki Link est manquant! –

Répondre

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

second paramètre alow vous définissez un format personnalisé comme indiqué dans le ICU manual. Ou vous pouvez définir le format php date() avec le préfixe php:.

Comme indiqué dans la documentation Yii2 les types de valeur suivants sont supportés:

Si vous avez chaîne de date personnalisée, vous pouvez utiliser DateTime::createFromFormat() fonction:

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

Pourriez-vous s'il vous plaît expliquer pourquoi c'est une bonne solution au problème. –

+0

@dmvslv Cela fonctionne! mais la valeur affichée est: '30 -52-2014 02 :: ', et le format que j'utilise est' d-m-Y H: i: s ', quel est le problème? – Edxz

+1

@Edxz Vous devez ajouter le préfixe 'php:' avant le formatage. – dmvslv

2

si vous voulez afficher dans votre vue, puis il suffit d'écrire votre code comme celui-ci

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

son afficher le format de jj-mm-aa h: i: s

+0

Vous pouvez essayer client_modified_date: date pour la valeur. Cela prendra le format du composant formateur que vous avez configuré dans la configuration de votre application. Le modèle est l'attribut: format: label – SenG

2

Utilisation de la date et du champ de saisie du plugin jQuery.Alors, sans problème résolu widget de la prochaine façon:

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

$model->released_date est une date dans l'horodatage de format MySQL.

9

Vous avez trouvé la bonne solution vous-même en définissant le formateur dans la configuration.

En fonction de l'application squelette que vous avez utilisée (par exemple, un modèle avancé officiel), vous ajoutez ceci à votre fichier de configuration main.php.

/your-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 here in the 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) utilisent la propriété "format"

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

'$ yourDatetime: datetime' indique la valeur de la date et du champ Heure augmentée de 1 heure. par exemple, si la valeur de la date et de l'heure de la table est ** 2016-03-15 09: 00: 02 ** alors ce code s'affiche ** Mar 15, 2016, 10:00:02 AM ** – Choxx

0

Si vous voulez juste afficher la date et l'heure de la valeur de l'horodatage comme 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