4

我有一个带有事件的 Rails 应用程序。我的事件表有一个名为start_datedatetime 类型的字段。目前,当我使用慢性保存事件来解析 start_date 字段时,日期存储不正确(或至少返回不正确)。

示例:我保存了一个事件,并在我输入的 start_date 的文本字段中9/14/13 at 9am。它保存了数据,刷新了页面,文本字段中的值为9/14/13 at 11am. mysql 表中的值为2013-09-14 16:00:00.

这里发生了什么?这只发生在我的服务器上,而不是在本地运行时。

应用程序.rb:

config.time_zone = 'Central Time (US & Canada)'

模型/事件.rb:

class Event < ActiveRecord::Base
    belongs_to :user
    attr_accessible :description, :name, :start_date_string

    validate :name_not_blank
    validate :start_date_not_blank

    # Validate that the name is not blank
    def name_not_blank
        errors.add(:name, "Name can't be blank") unless !name.blank?
    end

    # Validate that the name is not blank
    def start_date_not_blank
        errors.add(:start_date, "Date and Time can't be blank") unless !start_date.blank?
    end

    # getter
    def start_date_string
        @start_date_string || start_date.in_time_zone.try(:strftime, "%m/%d/%Y at %I:%M %P")
    end

    # setter
    def start_date_string=(value)
        @start_date_string = value
        self.start_date = parse_start_date
    end

    # parse the start_date
    def parse_start_date
        Chronic.parse(start_date_string)
    end     
end

助手/application_helper.rb:

# Formats a date to words (i.e. March 20, 1980 at 10:00 am)
def spell_date_and_time(date) 
    date.strftime("%B %d, %Y at %I:%M %P")
end

编辑.html.erb

<span class="timestamp"><%= spell_date_and_time(event.start_date) %></span>
4

4 回答 4

3

假设'Central Time (US & Canada)'是正确的(即您不在东部时区),那么:

> Time.zone = "UTC" 
> Chronic.time_class = Time.zone 
> Chronic.parse("June 15 2006 at 5:45 AM") 
=> Thu, 15 Jun 2006 05:45:00 UTC +00:00

你可以把Chronic.time_class = Time.zone它放进去config/initializers/chronic.rb

于 2013-09-02T23:43:23.240 回答
1

我有同样的问题,我只是通过在我的 application.rb 中评论这一行来修复它:

config.active_record.default_timezone = :local

我是根据我在 application.rb 中读到的内容来做的:

# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
于 2014-09-18T19:09:38.917 回答
0

我有同样的问题,通过在 application.rb- 中添加它来解决它

config.time_zone = 'Central Time (US & Canada)'
config.active_record.default_timezone = :local
于 2013-08-30T06:02:29.103 回答
0

对不起,我在平板电脑上,所以这必须简短。我遇到了这样的问题并通过使用类似的东西来纠正它

Time.now.utc 

我确实看到您在 application.rb config.time_zone 中有,所以这可能不起作用。

如果没有,这是一个很好的答案,也许会有所帮助

为什么`config.time_zone`似乎没有做任何事情?

于 2013-08-30T03:32:52.363 回答