gpt4 book ai didi

php - 更改 CGridView 的时区

转载 作者:可可西里 更新时间:2023-11-01 01:01:48 24 4
gpt4 key购买 nike

我目前正在开发一个 Web 应用程序,它允许我在执行期间更改时区。我开始测试一些案例,但不幸的是它不适用于 CGridView。

工作测试

此处的代码适用于更改时区。我用 setTimeZone()函数是 date_default_timezone_set() 的包装器功能。

Yii::app()->setTimeZone("America/Montreal");
echo "mtl:".date("Y-m-d H:i", 1396624849)."<br>";

Yii::app()->setTimeZone("Asia/Gaza");
echo "gz:".date("Y-m-d H:i", 1396624849);

输出很有意义(mtl:2014-04-04 11:20gz:2014-04-04 18:20)。

CGridView 实现

当我尝试使用 CGridView 在 View 中使用完全相同的行时,它不起作用并且仅显示我的默认日期格式。这是代码:

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));'
),
),
));

即使我更改 America/Montreal 的时区,输出日期也保持不变。

到目前为止尝试了什么

将 setTimeZone() 函数添加到具有日期定义的函数中,如下所示:

'value'=>function($data){
Yii::app()->setTimeZone("America/Montreal");
return date(Yii::app()->params->dateformat, strtotime($data->inserted));
}

结果和之前一样。

结论

为什么它不起作用?有没有办法在 Yii 中动态更改时区?有没有可能因为 CGridView 是用 eval 操作构建的,所以它不起作用?

最佳答案

试试这个,它应该工作。

$dateTime = new DateTime();
$dateTime->setTimezone(new DateTimeZone('Asia/Gaza'));

$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'reports-grid',
'dataProvider'=>$dataProvider,
'filter'=>$filtersForm,
'columns'=>array(
array(
'header'=>'Date',
'name'=>'inserted',
'type'=>'raw',
'value'=>function($data) use ($dateTime){
$dateTime->setTimestamp(strtotime($data->inserted));
return $dateTime->format(Yii::app()->params->dateformat);
}
))
));

通过在函数外部设置时区并在函数内部使用它,应该一切正常。

关于php - 更改 CGridView 的时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22867019/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com