我有一個事件的Rails應用程序。我的活動表有一個名爲start_date
的字段,它是datetime類型的字段。目前,當我使用慢速保存事件來解析start_date字段時,日期被錯誤地存儲(或者至少返回錯誤)。在datetime上的時區導軌問題
例如:我保存了一個事件,並在start_date的文本字段中輸入了9/14/13 at 9am
。它保存了數據,刷新了頁面,文本框中的值爲9/14/13 at 11am
。 mysql表中的值是2013-09-14 16:00:00
。
這是怎麼回事?這隻發生在我的服務器上,而不是在本地運行。
application.rb中:
config.time_zone = 'Central Time (US & Canada)'
型號/ event.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
edit.html.erb
<span class="timestamp"><%= spell_date_and_time(event.start_date) %></span>
順便說一句,真的沒有必要'parse_start_date',你可以有'start_date_string'制定者。如果您使用的是文本字段,還可以查看無時間值和空白時間值。 – montrealmike