如何在Ruby on Rails中获取月份名称?

57

所以我在我的视图中创建了:

<%=date=Date.today%>

如何从日期中获取月份的名称?我尝试过类似的方式:

 <%= DATE::ABBR_MONTHNAMES(date.month)%>    

但一直没有成功。我不断收到一个错误信息:未初始化常量ActionView::Base::CompiledTemplates::MONTHNAMES

如何初始化该常量或是否有其他方法可以从日期格式中获取名称呢?

非常感谢任何答案!

7个回答

118

参考 这个

<% @date = Date.today  %>  
<%= @date.strftime("%B")%>

如果

@date >> Fri, 11 Jun 2010

那么

@date.strftime("%B") >> "June"

3
我希望有一个 Date.today.month_name 的功能。 - Chloe
2
@Chloe: 类日期;定义月份名称方法;self.strftime("%B");结束。 - MustModify
Date.today.strftime("%B") - gk12345

32

如果你只需要月份的名称,Rails提供的Date::MONTHNAMES常量是最简单的解决方案:

   Date::MONTHNAMES = 
   [
    [ 0] nil,
    [ 1] "January",
    [ 2] "February",
    [ 3] "March",
    [ 4] "April",
    [ 5] "May",
    [ 6] "June",
    [ 7] "July",
    [ 8] "August",
    [ 9] "September",
    [10] "October",
    [11] "November",
    [12] "December"
   ]

1
Date::MONTHNAMES[Time.zone.today.month] - Mosaaleb

18

如果您想要本地化的月份名称,请尝试使用:

I18n.t('date.month_names')[date.month]

例子:

I18n.t('date.month_names')[12] #=> "Dezembro"

Rails i18n 还提供了 date.abbr_month_names 用于缩写月份名称。在开头有一个 nil(空白)值,因此英语中的 January 映射到索引 1。来源:https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/en.yml#L19 - abhchand

5
如果您有一个特定的自定义日期/时间格式需要反复使用,那么您可以扩展ActiveSupport日期/时间助手。
例如,如果您在config/environment.rb中定义了以下内容:
ActiveSupport::CoreExtensions::Time::Conversions::DATE_FORMATS.merge!(:full_english => "%A %B %d, %Y at %I:%M %p")

当你在视图中调用Time.now.to_s(:full_english)时,你会获得类似下面的结果:

"Friday June 11, 2010 at 12:53 PM"

Ruby的strftime方法在http://apidock.com/ruby/Time/strftime上有很好的文档说明。


2
查看日期/时间转换器 to_formatted_s。这允许您定义日期格式(如“:month_only”),并使用 date.to_formatted_s(:month_only) 以便在 strftime 使用中获得最大的重用性。 - Dmitriy Likhten

3

选择你想要的东西

 Date.parse('5-jan-2017').strftime('%B')

结果:

=> "一月"

Date.parse('5-jan-2017').strftime('%b')

结果:

=> "Jan"

对于你进一步的日期相关问题,请参考此链接 http://www.foragoodstrftime.com/


0

0
您可以使用区域设置来显示月份名称。
# config/locales/en.yml
en:
  time:
    formats:
      default: "%F"
      short: "%b %d"
      long: "%b %d, %Y"
      month: "%b"

使用它

i(Time.zone.today, format: :month)

日期/时间格式


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接