php - 更改 CGridView 的时区

标签 php yii timezone cgridview

我目前正在开发一个 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/

相关文章:

c# - 启用不同时区的工作

php - 如何获取 codeigniter session 用户数据变量的值?

php - 查找 SQL 子字符串

php - 从数组中取出一个值

php - 如何将此表连接到 MySQL

php - 尝试使用 Yiimail 从数据库中获取电子邮件

php - URL 中的 Yii urlManager 语言

php - 如何使用 YII 框架指定一个 SEO 友好的 url,比如 twitter www.twitter.com/<name>

c# - 在 mac 上使用 FindTimeZoneById() c# 时缺少 'Mountain Standard Time' 时区

java - 为什么JDBC在保存日期时会将时间调整为默认时区?