Nome deste mês (Date.today.month as name)

115

Estou usando Date.today.monthpara exibir o número do mês. Existe um comando para obter o nome do mês ou preciso fazer um caso para obtê-lo?

Rod Nelson
fonte
A resposta de Dylan ainda funciona a partir de Ruby 2.5.0
oneWorkingHeadphone

Respostas:

196

Date::MONTHNAMES[Date.today.month]daria a você "janeiro". (Você pode precisar require 'date'primeiro).

Dylan Markow
fonte
28
Date.today.strftime("%B")é a melhor maneira de fazer isso, imho. E não é específico para trilhos. Veja a resposta abaixo por leafo.
Peter Berg
2
@PedroMorteRolo ainda funciona para mim no Ruby 2.2.0 - certifique-se de que funciona require 'date'primeiro.
Dylan Markow
121

Você também pode usar I18n:

I18n.t("date.month_names") # [nil, "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
I18n.t("date.abbr_month_names") # [nil, "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
I18n.t("date.month_names")[Date.today.month] # "December"
I18n.t("date.abbr_month_names")[Date.today.month] # "Dec"
Grilix
fonte
Como eu acho, esta resposta é melhor do que outras porque I18n retorna nomes de meses no local atual.
Stepan Zakharov
16

Se você se preocupa com a localidade, deve fazer o seguinte:

I18n.l(Time.current, format: "%B")
Yury Lebedev
fonte
ou I18n.l(Date.new, format: '%B')para começar com janeiro. Se quiser adicionar meses, como em fevereiro, useDate.new + 1.month
Rui Nunes
13

Para Ruby 1.9, tive que usar:

Time.now.strftime("%B")
Jpgeek
fonte
0

HTML Selecione o mês com I18n:

<select>
  <option value="">Choose month</option>
  <%= 1.upto(12).each do |month| %>
    <option value="<%= month %>"><%= I18n.t("date.month_names")[month] %></option>
  <% end %>
</select>
Abel
fonte