在Yii中设置默认时区

时间:2013-11-04 08:25:48

标签: php mysql datetime yii timezone

我在 config.php

中使用以下配置时区
'timeZone' => 'UTC',

工作正常,所有日期都根据 UTC 存储在数据库中。现在每个用户在他/她的个人资料中都有自己的时区,如 UTC + 5 UTC-5 UTC + 0 等。

现在,如何根据用户时区在报告中显示日期。我使用活动记录从数据库中获取记录。对于所有查询是否有任何通用方法,或者我们必须每次在php?

中手动将日期转换为用户时区

感谢。

3 个答案:

答案 0 :(得分:5)

您可以通过在config

的main.php文件中添加以下值来在Yii中设置时区
return array(   
  'timeZone' => 'Asia/Kolkata',
 )

PHP中的时区列表:http://php.net/manual/en/timezones.php

答案 1 :(得分:2)

加载用户数据后,尝试:

Yii:app()->timeZone = $userTimezone;

其中$ userTimezone - 从db加载用户时区。这是在Yii中使用

或者您可以通过以下方式在mysql中设置时区:

Yii::app()->db->createCommand('SET time_zone = <timezonename>')->execute()

并且所有TIMESTAMP字段都将在当前会话的设置时区

答案 2 :(得分:2)

您可以使用afterFind相应地更改时间

public function afterFind()
{
    //apply your logic here
    $zone = Yii:app()->timeZone;

    // I don't know code to change time zone, so I assume there is a function named "functionToChangeTimeZone"
    $this->time = functionToChangeTimeZone($this->time , $zone);

    return parent::afterFind();
}

现在每个记录都会根据设置更改时区