【问题标题】:Set default timezone in Yii在 Yii 中设置默认时区
【发布时间】:2013-11-04 08:25:48
【问题描述】:

我在 config.php

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

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

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

谢谢。

【问题讨论】:

  • 你是如何在表格中存储日期的?
  • UTC 日期存储在这样的数据库中 'yy-mm-dd'
  • 您有没有找到问题的好答案?您最终使用了哪种方法?

标签: php mysql datetime yii timezone


【解决方案1】:

您可以通过在配置的 main.php 文件中添加以下值来设置 Yii 中的时区

return array(   
  'timeZone' => 'Asia/Kolkata',
 )

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

【讨论】:

    【解决方案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();
    }
    

    现在每条记录都会根据它们的设置更改时区

    【讨论】:

      【解决方案3】:

      加载用户数据后尝试:

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

      其中 $userTimezone - 从数据库加载用户时区。在 Yii 中使用

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-12
        • 2012-12-21
        • 2015-07-01
        • 1970-01-01
        • 2011-12-26
        相关资源
        最近更新 更多