2014-06-29 15 views
11

Der in der Datenbank gespeicherte Datetime-Wert ist "2014-06-30 02:52:51.210201".Formatieren Sie den Datetime-Wert in Yii 2

Dies ist auch der von Yii angezeigte Wert.

Was ist der beste Ansatz, um es überall als "30-06-2014 02:52:51" anzuzeigen?

diese Gefunden in Yii's wiki aber nicht wissen, wie es zu benutzen:

Sie yii \ i18n \ Formatierer konfigurieren können Ihr globales Datum Formaten für die Anzeige für Ihren Ort zu steuern. Sie können so etwas wie diese in Ihrer Konfigurationsdatei festgelegt, die Sie über

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

zugreifen können Dann können Sie Ihr Datum mal überall mit den Formatierer angegebenen Formate anzeigen:

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

UPDATE

Ich erstelle ein benutzerdefiniertes Attribut für das Modell mit der Zeit aber

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

ein weiteres Problem abzurufen, wie verwende ich dieses Attribut für die Suche in Yü 2 des Gridview? Dank

GELöST

kann das benutzerdefinierte Attribut für die Suche hinzufügen, indem Sie die Funktion Suche erbt

+0

Ob Millisekunden Sie im allgemeinen notwendig sind? – frops

+0

@frops: Es ist das Standardformat in den Postgres – Edxz

+0

Wiki Link fehlt! –

Antwort

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

Zweiter Parameter alow Sie ein benutzerdefiniertes Format festgelegt, wie in den ICU manual angegeben. Oder Sie können php date() Format mit php: Präfix einstellen.

Wie in Yii2 Dokumentation erwähnt die folgenden Arten von Wert werden unterstützt:

Wenn Sie benutzerdefinierte Datumszeichenfolge haben, können Sie DateTime::createFromFormat() Funktion:

$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

Könnten Sie bitte erklären, warum dies eine gute Lösung für das Problem ist? –

+0

@dmvslv Das funktioniert! aber der angezeigte Wert ist: '30 -52-2014 02 :: ', und das Format, das ich verwende, ist' d-m-Y H: i: s ', was ist das Problem? – Edxz

+1

@Edxz Sie müssen 'php:' preffix vor dem Format hinzufügen. – dmvslv

2

, wenn Sie in der Ansicht angezeigt werden soll dann den Code genau wie dieser

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

Es zeigt das Format TT-MM-JJ H: I: s

+0

Sie könnten versuchen client_modified_date: date für value. Dies entspricht dem Format der Formatierungskomponente, die Sie in Ihrer App-Konfiguration konfiguriert haben. Das Muster ist ein Attribut: format: label – SenG

2

Verwenden des jQuery-Plug-Ins Datumsauswahl und Eingabefeld.Also, ohne Widget Problem die nächste Weise gelöst:

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

wo $model->released_date ist ein Datum in MySQL-Format Zeitstempel.

9

Sie haben die richtige Lösung selbst gefunden und setzen den Formatierer in der Konfiguration.

Basierend auf der Skelett-App, die Sie verwendet haben (zum Beispiel offizielle erweiterte Vorlage), fügen Sie dies zu Ihrer Konfigurationsdatei main.php hinzu.

/your-app/config/main.php

oder

/common/config/main.php

sollte wie folgt aussehen:

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

Die Eigenschaften, die Sie im Formatierungsprogramm verwenden können, finden Sie unter here in the documentation.

Dann können Sie in Ihrer App den Formatierer ohne Formatzeichenfolgen verwenden.

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

oder in Daten Widgets (wie Gridview) verwenden, um die "Format" Eigenschaft

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

'$ yourDatetime: datetime' Dies zeigt den Wert für den Wert der Uhrzeit an, wobei das Stundenfeld um 1 Stunde erhöht wird. Wenn beispielsweise der Datums-/Zeitwert aus der Tabelle ** 2016-03-15 09: 00: 02 ** lautet, wird dieser Code angezeigt ** 15.03.2016, 10:00:02 Uhr ** – Choxx

0

Wenn Sie nur von Zeitstempelwert wie created_at Datum und Zeit zu zeigen, updated_at dann!

Gridview:

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

Gleiche wie DetailVeiw:

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