Ich arbeite derzeit an einer Webanwendung, die es mir ermöglichen wird, die Zeitzone während der Ausführung zu ändern. Ich habe begonnen, einige Fälle zu testen, aber leider funktioniert es nicht für das CGridView.
Arbeitstests
Dieser Code hier funktioniert, um die Zeitzone zu ändern. Ich verwende die setTimeZone()-Funktion, die ein Wrapper für die date_default_timezone_set()-Funktion ist.
Yii::app()->setTimeZone("America/Montreal");
echo "mtl:".date("Y-m-d H:i", 1396624849)."";
Yii::app()->setTimeZone("Asia/Gaza");
echo "gz:".date("Y-m-d H:i", 1396624849);
Die Ausgabe macht viel Sinn (mtl:2014-04-04 11:20
, gz:2014-04-04 18:20
).
CGridView-Implementierung
Wenn ich die exakt gleiche Zeile in einer Ansicht mit einem CGridView ausprobiere, funktioniert es nicht und es wird nur mein Standard-Datumsformat angezeigt. Hier ist der Code:
Yii::app()->setTimeZone("Asia/Gaza");
echo Yii::app()->getTimeZone();
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'reports-grid',
'dataProvider'=>$dataProvider,
'filter'=>$filtersForm,
'columns'=>array(
array(
'header'=>'Date',
'name'=>'inserted',
'type'=>'raw',
'value'=>'date(Yii::app()->params->dateformat, strtotime($data->inserted));'
),
),
));
Das Ausgabedatum bleibt dasselbe, auch wenn ich die Zeitzone auf America/Montreal
ändere.
Bisherige Versuche
Hinzufügen der setTimeZone()-Funktion zu einer Funktion mit der Datumsdefinition, wie folgt:
'value'=>function($data){
Yii::app()->setTimeZone("America/Montreal");
return date(Yii::app()->params->dateformat, strtotime($data->inserted));
}
Das Ergebnis war dasselbe wie zuvor.
Schlussfolgerung
Warum funktioniert es nicht? Gibt es eine Möglichkeit, die Zeitzone dynamisch in Yii zu ändern? Ist es möglich, dass es nicht funktioniert, weil das CGridView mit eval-Operationen erstellt wurde?