为什么在我的视图中输出日期的格式与Rails控制台中的to_date格式不同?

mar*_*ion 0 datetime ruby-on-rails ruby-on-rails-3

在我看来,我这样做:

  <td><%= client.last_contact.to_date %></td>
Run Code Online (Sandbox Code Playgroud)

这输出:

2011-08-11
Run Code Online (Sandbox Code Playgroud)

但是当我在控制台中执行此操作时,我得到了我想要的格式:

1.9.3p194 :093 > c.last_contact
 => Thu, 11 Aug 2011 00:00:00 UTC +00:00 
1.9.3p194 :094 > c.last_contact.to_date
 => Thu, 11 Aug 2011 
Run Code Online (Sandbox Code Playgroud)

在我看来,我希望它显示它在控制台中的日期和格式.

我如何实现这一目标?

谢谢.

Nic*_*sky 6

在rails视图中显示时间/日期的最佳方法是使用I18n本地化功能.您可以config/locales在yaml文件中的目录中设置日期时间格式.像这样的东西

# config/locales/datetime.en.yml
en:
  time:
    formats:
      # Use the strftime parameters for formats.
      # When no format has been given, it uses default.
      # You can provide other formats here if you like!
      default: "%d.%m.%Y"
      short: "%d %b"
      long: "%d %B %Y"
      date: "%a, %d %b %Y"
Run Code Online (Sandbox Code Playgroud)

然后l在视图中使用帮助器

<%= l client.last_contact, :format => :date %>
Run Code Online (Sandbox Code Playgroud)


Fre*_*ung 5

控制台调用inspect值,而erb标签调用to_s它们的值.

虽然您可以inspect在您的视图中调用,但我鼓励您使用strftime哪个允许您准确定义您想要的内容

Date::today.strftime('%a, %d %b %Y')` 
Run Code Online (Sandbox Code Playgroud)

或使用I18n.localize帮助程序(别名l),它允许您定义格式并重用它们

I18n.localize Date::today, :format => :long
Run Code Online (Sandbox Code Playgroud)