我需要以本地化格式显示日期。即12/31/2013
因此,我在config / initializers / datetime_formats.rb中将默认日期格式设置为该格式
Date::DATE_FORMATS[:default]="%m/%d/%Y"
Time::DATE_FORMATS[:default]="%m/%d/%Y %H:%M"
但是,我的测试在单元测试中失败了,因为有些搜索是基于日期格式的。例如
>> User.find_by_created_at("#{DateTime.now}")
User Load (2.7ms) SELECT `users`.* FROM `users`
WHERE `users`.`created_at` = '02/04/2013 14:43' LIMIT 1
当然,我可以更改所有模型以使用所有日期或日期时间搜索来使用Date类或DateTime类而不是字符串。但是,如果我们可以应用仅查看日期格式或仅查看时间格式,我很好奇。
有没有办法应用仅查看日期(或时间)格式?
-----编辑-----
我已经为具有异常处理的视图提供了自定义方法l_or_none。
def l_or_none(object)
l(object) rescue ''
end
我只是不想在整个视图中重复这个方法,并寻找一种方法,“如果在视图中调用Date#to_s,以这种方式格式化”,而不使用我自己的方法。
为什么我们没有这样的概念?
“如果在视图下使用此对象,则以这种方式覆盖方法”
答案 0 :(得分:18)
您可以使用rails的本地化:
config/locales/en-US.yml
date:
formats:
default: "%m/%d/%Y"
short: "%m/%d"
datetime:
formats:
default: "%m/%d/%Y %H:%M"
short: "%H:%M"
notime: "%m/%d/%Y"
在视图中:
<%= l(@entry.created_at) %>
<%= l(@entry.created_at, :format => :short) %>
<%= l(@entry.created_at, :format => :notime) %>
结果:
02/13/2013 15:24
15:24
02/13/2013
答案 1 :(得分:0)
试试这个,也许事情会好的:
User.find_by_created_at(DateTime.now)