6

我需要以本地化格式显示日期。即 2013 年 12 月 31 日

因此,我在 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

当然,我可以将所有模型更改为使用所有日期或日期时间搜索以使用日期类或日期时间类而不是字符串。但是,我很好奇我们是否可以应用仅查看日期格式或仅查看时间格式。

有没有办法应用仅查看日期(或时间)格式?

- - - 编辑 - - -

我已经有自定义方法 l_or_none 用于具有异常处理的视图。

def l_or_none(object)
  l(object) rescue ''
end  

我只是不想在所有视图中重复此方法,并寻找一种方法,“如果在视图中调用 Date#to_s,则以这种方式格式化”,而不使用我自己的方法。

为什么我们没有这样的概念?

“如果在视图下使用此对象,请以这种方式覆盖方法”

4

2 回答 2

18

您可以使用导轨的本地化:

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

http://guides.rubyonrails.org/i18n.html

于 2013-02-13T14:25:13.457 回答
0

试试这个,也许事情会好起来的:

User.find_by_created_at(DateTime.now)
于 2013-02-19T16:35:43.790 回答