这个问题几乎与此相同:
除了最佳答案对我不起作用。我是Ruby和RoR的新手,所以我不知道我到底做了什么。这是我到目前为止所拥有的。
我在en.yml
中添加了默认的日期和时间格式:
en:
date:
formats:
default: '%d.%m.%Y'
time:
formats:
default: '%H:%M'
我还添加了一个新的初始化程序,其代码如下:
Date::DATE_FORMATS[:default] = '%d.%m.%Y'
Time::DATE_FORMATS[:default] = '%H:%M'
当我转到rails控制台并执行Time.now.to_s
或Date.today.to_s
时,我得到了正确的结果。当从数据库中获取并显示在模型索引页面上时,这些也会正确显示。
但是,当我尝试创建一个带有一些日期和时间字段的表单(而不是日期时间!)时,我会得到适合日期的旧YYYY-MM-DD
,以及时间的整个YYYY-MM-DD HH:mm:ss.nnnnnn
。
正确格式化这些输入值的最佳做法是什么?我想避免在视图中更改任何内容(比如它已完成here),并在应用程序级别上正确解决 - 如果可能的话。
答案 0 :(得分:3)
这就是我最终做的事情:
首先,我在模型中定义了一个自定义字段:
attr_accessible :entry_date_formatted
def entry_date_formatted
self.entry_date.strftime '%d.%m.%Y' unless self.entry_date.nil?
end
def entry_date_formatted=(value)
return if value.nil? or value.blank?
self.entry_date = DateTime.strptime(value, '%d.%m.%Y').to_date
end
然后我将表单从entry_date
更改为entry_date_formatted
:
<%= form.text_field :entry_date_formatted, :placeholder => 'Date' %>
最后但同样重要的是,我已将相关字段添加到我的语言环境文件中:
en:
activerecord:
attributes:
time_entry:
entry_date_formatted: Entry date
start_time_formatted: Start time
end_time_formatted: End time
这可能不是最好的方式,但现在它对我很有好处。