首先:请重命名您的字段,因为 created_at 可能会导致与 ActiveRecord 冲突。
我对格式为 M/D/YYYY H:M(24 小时格式的小时/分钟)的字段进行了此操作
在您的模型中:
attr_accessor :due_date, :due_time
before_validation :make_due_at
def make_due_at
if @due_date.present? && @due_time.present?
self.due_at = DateTime.new(@due_date.year, @due_date.month, @due_date.day, @due_time.hour, @due_time.min)
end
end
def due_date
return @due_date if @due_date.present?
return @due_at if @due_at.present?
return Date.today
end
def due_time
return @due_time if @due_time.present?
return @due_at if @due_at.present?
return Time.now
end
def due_date=(new_date)
@due_date = self.string_to_datetime(new_date, I18n.t('date.formats.default'))
end
def due_time=(new_time)
@due_time = self.string_to_datetime(new_time, I18n.t('time.formats.time'))
end
protected
def string_to_datetime(value, format)
return value unless value.is_a?(String)
begin
DateTime.strptime(value, format)
rescue ArgumentError
nil
end
end
现在在视图中:
<%= text_field_tag :due_time, I18n.l(@mymodel.due_time, :format => :time) %>
<%= text_field_tag :due_date, I18n.l(@mymodel.due_date, :format => :default) %>
现在在 config/locales/en.yml 中(如果是英文)
date:
formats:
default: "%m/%d/%Y"
time:
formats:
time: "%H:%M"
当然,您可以更改日期格式。