【问题标题】:How can I get month name from month number [duplicate]如何从月份编号中获取月份名称[重复]
【发布时间】:2015-11-29 07:29:00
【问题描述】:

我可以得到下个月的月份和年份:

(Time.now + 1.month).month
# => 10
(Time.now + 1.month).year
# => 2015

如何从10 获得"October"

【问题讨论】:

    标签: ruby-on-rails ruby date time


    【解决方案1】:

    Ruby Date 类提供了一个包含月份名称的常量数组。您可以将月份编号作为索引传递,并获得月份名称

    Date::MONTHNAMES[10]
    # November
    

    获取缩写的月份名称

    Date::ABBR_MONTHNAMES[10]
    # Nov
    

    或者您也可以使用 strftime %B 格式化程序从日期获取月份名称,例如

    Date.today.strftime(%B)
    # September
    

    类似

    (Time.now + 1.month).strftime('%B')
    # November
    

    如果您的应用程序是多语言或使用非英语语言,您可以使用 I18n 获取本地化月份名称

    I18n.l(Time.now, format: "%B")
    

    【讨论】:

    • 总结了三个选项。我更喜欢通过上下投票的个人答案来显示它们的相对优点。
    • 似乎在最近的版本中,Date::MONTHNAMES 的月份名称映射到日历中的月份编号,所以现在是 Date::MONTHNAMES[10] == "October"
    【解决方案2】:

    我认为应该在 I18n 模块的帮助下完成,因为strftime 忽略了语言环境:

    (Time.now + 1.month).strftime("%B") # => 'October'
    
    I18n.l(Time.now + 1.month, format: "%B") # => 'Oktober'
    

    【讨论】:

      【解决方案3】:

      您可以使用日期的月份名称常量

      Date::MONTHNAMES[10] => "October"
      

      【讨论】:

      • 在我的情况下,我需要从一个整数中获取月份名称“让我们说九月”,这个整数就是我所拥有的,我无法控制更改它,所以我使用了这个 <%= Date::MONTHNAMES[month] %> 工作像一个魅力
      • 谢谢。您的回答为我节省了大量时间。
      【解决方案4】:

      使用格式字符串。

      (Time.now + 1.month).strftime("%B")
      # => "October"
      

      【讨论】:

      • 它有效,但忽略了语言环境
      • @ArupRakshit 是的,没错,但我认为提及它可能仍然有用。
      • 并没有真正回答所提出的实际问题。提问者的输入是数字,而不是日期。
      • @GrantBirchmeier 确实如此。 OP 一般询问如何获取月份名称。 10 就是这种情况下的一个例子。有问题的10,因为该问题是在Sep 月份提出的,并且添加了1 个月至今,即Oct。问题中的示例并不是真正的直接问题。
      猜你喜欢
      • 2011-03-12
      • 1970-01-01
      • 2017-10-03
      • 2017-08-15
      • 2015-09-25
      • 2017-02-19
      • 1970-01-01
      相关资源
      最近更新 更多