Dan*_*ier 3 ruby mysql timezone activerecord ruby-on-rails
我想按创建日期对用户进行计数。当我查询最后一个用户时,我有:
> User.last.created_at
=> Thu, 07 Aug 2014 21:37:55 BRT -03:00
Run Code Online (Sandbox Code Playgroud)
当我计算每个日期的用户数时,我得到:
> User.group("date(created_at)").count
=> {Fri, 08 Aug 2014=>1}
Run Code Online (Sandbox Code Playgroud)
创建日期是 8 月 7 日,但结果是 8 月 8 日。发生这种情况是因为组条件采用 UTC,而我的时区是“巴西利亚”。我的application.rb:
config.time_zone = 'Brasilia'
config.active_record.default_timezone = :local
Run Code Online (Sandbox Code Playgroud)
怎么解决这个问题呢?
首先尝试convert_tz:
User.group("date(convert_tz(created_at,'UTC','[your_time_zone]'))").count
Run Code Online (Sandbox Code Playgroud)
如果convert_tz返回null,也许您需要使用此命令行加载时区表:
$ mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
Run Code Online (Sandbox Code Playgroud)
编辑1:
如果您使用 Rackspace MySQL,则需要启用对数据库的 root 访问权限并以 root 身份运行时区查询。您可以在此处找到有关如何trove使用rackspace API 安装和启用root 访问权限的说明。
| 归档时间: |
|
| 查看次数: |
1735 次 |
| 最近记录: |