如何更改视图的日期时间格式(使用i18n?)

时间:2011-11-16 15:15:23

标签: ruby-on-rails-3 datetime

我在使用日期时间格式时遇到问题。现在的情况: 我有一个带有日期时间的几个字段的数据库。格式类似于2011-11-16 15:07:00 UTC。我想在我的应用程序中更改此格式。我不在乎它是否以这种方式保存在数据库中,但我希望它在相应的视图中更加客户友好(我来自德国,所以这将是16.11.2011 15:07)。 我尝试使用I18n,它至少可以用于几个部分。我创建了一个语言环境(并将default_locale添加到application.rb)。 rails是否有一种方法可以在不改变相应视图的情况下使用此区域设置?我找不到它,所以我(成功地)尝试了以下内容:

对于我的索引视图,我已经使用了一个小函数 application_helper.rb:

    module ApplicationHelper  
       def nice_date_form(the_date)
          if !the_date.nil? 
             I18n.l the_date, :format => :short
          end
       end
    end

当我尝试将该方法与编辑/新视图(_form.html.erb)一起使用时出现问题,它根本不起作用。过了一会儿,我遇到了关于主题虚拟属性的RailsCast,这至少暂时解决了我的问题。我可以在模型中使用getter和setter方法,但是对于不同的表和字段,这将是一个很大的重复。

_form.html.erb:

    (...)
    <div class="field">
    <%= f.label :abfahrt %><br />
    <%= f.text_field :nice_date_edit %> 
    </div>
    (...)

长话短说:我现在搜了很久,不知道从哪里继续。我想这不是解决这个问题的最佳方法吗?有没有办法简化它并为datetime设置一种rails-wide格式呢?

一些提示将不胜感激!提前谢谢。

基督教

2 个答案:

答案 0 :(得分:2)

您可以使用strftime()在视图标签中格式化日期时间(在相应的视图中对客户友好)。

你的助手方法可能是

module ApplicationHelper  
   def nice_date_form(the_date)
      if !the_date.nil? 
         the_date.strftime(“%d.%m.%y %H:%M”)
      end
   end
end

有关详细信息,请查看Rails Datetime Format

答案 1 :(得分:1)

查看有关创建用户时区的此railscast:http://railscasts.com/episodes/106-time-zones-in-rails-2-1