首页 文章

配置Ruby-on-rails created_at和updated_at日期time_zone

提问于
浏览 305
1

Rails以UTC时间存储created_at和updated_at时间戳 .

但我正在使用这些字段根据这些字段过滤和存储(并对记录执行许多其他操作),因此,当我调用created_at和updated_at属性时,我会在我的时区中获得时间戳 .

正如以下两个SO问题所述,我可以通过在environment.rb文件中配置时区来实现 .

但是,现在这对我有用 .

因为我从数据库中获取记录,基于 created_at 字段(以UTC格式),所以自然会出现错误的记录,然后我显示它们,所以日期以UTC显示,而不是我想要的 .

有没有办法改变rails存储日期的时区?

要么

有没有一种解决方法可以实现数据库获取和显示,而无需调用Rails object.created_at 属性?

Rails and timezone in created_at

Rails Time zone issue

1 回答

  • 0

    我想知道为什么我甚至在这个论坛上提出这个问题,因为解决方法似乎很简单 . 但它确实需要8个小时才能达到它:)

    1)从数据库中提取记录并显示它们时,我可以这样做

    select CONVERT_TZ(date) as date from table;
    

    而不是做

    select date from table;
    

    CONVERT_TZ()mysql 特定功能,所以它对我有用 . 虽然不是通用的解决方案 .

    2)其次,当我必须从任何其他时区给出的日期范围中获取记录时,我可以做两件事之一 .

    一个 - 我可以用 [user-entered-date] 07:00:00 替换 [user-entered-date] 00:00:00 作为日期范围的起点,而 [user-entered-date] 59:59:59 替换为 [user-entered-date + 1.day] 07:00:00 作为范围的终点 . 请注意,这将要求我使用DateTime对象而不是使用Date对象 .

    二 - 在 where 条款中,我能做到

    CONVERT_TZ(registrations.created_at) <= [user/entered/date]
    

    代替

    (registrations.created_at) <= [user/entered/date]
    

相关问题