2012-06-15 8 views
12

avevo seguito cgridview in applicazione Yii, voglio cambiare il formato della data in termini di valore,Yii, spettacolo diverso formato della data in cgridview

'columns'=>array(
     array(
       'name'=>'Date', 
       'header'=>'Date', 
       'value'=>'$data["work_date"]' 
      ), 

Voglio mostrare la data nel formato gg-mm-aaaa attualmente mostra come aaaa-mm-gg.

risposta

26

Prova questo,

array(
    'name'=>'Date', 
    'header'=>'Date', 
    //'value'=>'date("d M Y",strtotime($data["work_date"]))' 
    'value'=>'Yii::app()->dateFormatter->format("d MMM y",strtotime($data->date))' 
), 
+0

Sarebbe meglio utilizzare Yii fornito strumenti. Per questo compito esiste [CDateFormatter] (http://www.yiiframework.com/doc/api/1.1/CDateFormatter # format-dettaglio). – sucotronic

+0

Grazie, funziona. Ho appena modificato la data 'valore' => '("dmY", strto ... – Kiran

+0

@sucotronic, avevo attualmente utilizzato il codice php per la visualizzazione della data. non riesce a trovare il modo di usare CDateFormatter, puoi per favore dammi un codice di esempio per questo ??? Grazie in anticipo – Kiran

2

Ci sono (almeno) due opzioni:

(Quando si utilizza CGridView/CDetailView) si consiglia di formattare una data stringa (vale a dire: campo datetime mysql) invece di un timestamp. È possibile utilizzare questo:

array(
    'name' => 'startsOn', 
    'format' => 'datetime', 
    'value' => 'strtotime($data->startsOn)' 
), 

Oppure utilizzare questo:

array(
    'name' => 'startsOn', 
    'value' => 'Yii::app()->dateFormatter->format("d MMM y", strtotime($data->startsOn))' 
), 
+0

sì la stessa cosa mostrata nella risposta di cui sopra. – Kiran

5

Credo che ci sia modo più elegante per il formato della data (o qualsiasi altra cosa) rispetto a quello proposto in altre risposte. CGridView utilizza la proprietà formatter per specificare l'applicazione component to format values. È format per impostazione predefinita.

Quindi si dovrebbe configurare format componente nel file di configurazione di un'applicazione come questa:

'components' => array(
    ... 
    'format' => array(
     'dateFormat' => 'd-m-Y' 
    ) 
) 

Se work_date è già timestamp Unix allora è sufficiente per descrivere la colonna in CGridView come segue:

array(
    'name' => 'work_date', 
    'type' => 'date' 
) 

Se work_date è come nella domanda quindi l'array della colonna:

array(
    'name' => 'work_date', 
    'type' => 'date', 
    'value' => 'strtotime($data->work_date)' 
) 

Se uno ha campo personalizzato al formato che non è supportato da CFormatter allora è facile aggiungere la tua typecustom estendendo CFormatter:

class MyFormatter extends CFormatter 
{ 
    public function formatCustom($value) 
    { 
     // format $value parameter, i.e. make date conversion like in the question: 
     return date("d-m-Y", strtotime($value)); 
    } 
} 

Poi la configurazione del componente formato è:

'components' => array(
    ... 
    'format' => array(
     'class' => 'MyFormatter' 
    ) 
) 

E la colonna è descritta in questo modo:

array(
    'name' => 'work_date', 
    'type' => 'custom' 
) 

In questo modo non è necessario preoccuparsi dell'espressione PHP value ogni volta che si desidera formattare il campo dello stesso tipo.

+0

Sono d'accordo. +1 per l'eleganza. –

+0

soluzione migliore, questa che stavo cercando – iamawebgeek

0

Per admin.php

array(
     'name'=>'start_date', 
     'header'=>'Date', 
     'value'=>'date_format(date_create($data->start_date), "d-m-Y ")', 
    ), 

Per view.php

array(
    'name'=>'Date', 
    'value'=>date_format(date_create($model->order_date), "d-m-Y "), 
    ), 
Problemi correlati