2014-06-29 18 views
11

Il valore datetime salvato nel database è "2014-06-30 02:52:51.210201".Formattare il valore datetime in Yii 2

Questo è anche il valore visualizzato da Yii.

Qual è l'approccio migliore per visualizzarlo come "30-06-2014 02:52:51" ovunque?

trovato questo nella Yii's wiki, ma non sanno come usarlo:

È possibile configurare Yii \ i18n \ formattatore di controllare la data globale formati per la visualizzazione a quelle locali. È possibile impostare qualcosa di simile nel file di configurazione che è possibile accedere attraverso

'formatter' => [ 'class' => 'yii\i18n\Formatter', 'dateFormat' => 'd-M-Y', 'datetimeFormat' => 'd-M-Y H:i:s', 'timeFormat' => 'H:i:s', ]

Quindi è possibile visualizzare i tempi di data qualsiasi luogo utilizzando il formattatore formati specificati:

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

UPDATE

crea un attributo personalizzato per il modello per recuperare il tempo

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

un altro problema, però, come faccio a utilizzare questo attributo per la ricerca in GridView di Yii 2? grazie

RISOLTO

può aggiungere l'attributo personalizzato per la ricerca dal eredita la funzione di ricerca

+0

Sia millisecondi sono necessari per voi in generale? – frops

+0

@frops: è il formato predefinito nel postgres – Edxz

+0

Wiki Link mancante! –

risposta

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

Secondo parametro alow di impostare un formato personalizzato come specificato nel ICU manual. Oppure è possibile impostare il formato php date() con il prefisso php:.

Come indicato nella documentazione Yii2 sono supportati i seguenti tipi di valore:

Se hai data personalizzata stringa è possibile utilizzare DateTime::createFromFormat() funzione:

$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

Potresti spiegare perché questa è una buona soluzione al problema. –

+0

@dmvslv Funziona! ma il valore visualizzato è: '30 -52-2014 02 :: ', e il formato che uso è' d-m-Y H: i: s ', qual è il problema? – Edxz

+1

@Edxz È necessario aggiungere prefisso 'php:' prima del formato. – dmvslv

2

se si desidera visualizzare nella vista poi basta scrivere il codice come questo

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

il suo spettacolo il formato di gg-mm-aa h: i: s

+0

Si potrebbe provare client_modified_date: date for value. Questo prenderà il formato dal componente formattatore configurato nella configurazione dell'app. Il modello è attributo: formato: etichetta – SenG

2

Utilizzo di datepoint jQuery plugin e campo di immissione.Così, senza widget di risolto problema nel modo seguente:

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

dove $model->released_date è una data in formato mysql timestamp.

9

Avete trovato la soluzione giusta da soli, impostando il formattatore nella configurazione.

In base all'app scheletro che hai utilizzato (ad esempio il modello avanzato ufficiale), la aggiungi al file di configurazione main.php.

/your-app/config/main.php

o

/common/config/main.php

dovrebbe essere simile a questo:

<?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', 
], 
?> 

Vedere here in the documentation per le proprietà che è possibile utilizzare nel programma di formattazione.

Quindi nella app è possibile utilizzare il formattatore senza stringhe di formato.

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

o nei widget di dati (come GridView) usano la proprietà "formato"

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

'$ yourDatetime: datetime' mostra il valore di data ora con campo Ora aumentato di 1 ora. ad esempio se il valore datetime della tabella è ** 2016-03-15 09: 00: 02 ** allora questo codice visualizza ** 15 marzo 2016, 10:00:02 ** – Choxx

0

Se si desidera solo per mostrare la data e l'ora dal valore di data e ora come created_at, updated_at allora!

GridView:

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

Uguale DetailVeiw:

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