Nazwa tego miesiąca (Date.today.month as name)

115

Używam Date.today.monthdo wyświetlenia numeru miesiąca. Czy istnieje polecenie pobrania nazwy miesiąca, czy też muszę przedstawić sprawę, aby ją uzyskać?

Rod Nelson
źródło
Odpowiedź Dylana nadal działa od Ruby 2.5.0
oneWorkingHeadphone

Odpowiedzi:

196

Date::MONTHNAMES[Date.today.month]dałoby ci „styczeń”. (Być może będziesz musiał require 'date'najpierw).

Dylan Markow
źródło
28
Date.today.strftime("%B")to lepszy sposób na zrobienie tego, imho. I to nie jest specyficzne dla szyn. Zobacz odpowiedź poniżej przez leafo.
Peter Berg
2
@PedroMorteRolo nadal działa dla mnie na Ruby 2.2.0 - upewnij się, że require 'date'najpierw.
Dylan Markow
121

Możesz także użyć 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
źródło
Jak myślę, ta odpowiedź jest lepsza niż inne, ponieważ I18n zwraca nazwy miesięcy w bieżących lokalizacjach.
Stepan Zakharov
80

Możesz użyć strftime:

Date.today.strftime("%B") # -> November

http://www.ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/Date.html#strftime-method

leafo
źródło
2
Tylko ostrzeżenie dla każdego, kto używa Ruby 2, muszę użyć Time.new.strftime("B")Dzisiaj i strftime są usunięte z Date
Sanarothe
7
Nie prawda. Oba są na miejscu w Ruby 2.0 i Ruby 2.1 . Zwróć uwagę, że nie są one dostępne, dopóki nie są dostępne require "date", ponieważ znajdują się w std-lib, a nie w rdzeniu.
pbyrne
16

Jeśli zależy Ci na lokalizacji, zrób to:

I18n.l(Time.current, format: "%B")
Yury Lebedev
źródło
lub I18n.l(Date.new, format: '%B')zacząć od stycznia. Jeśli chcesz dodać miesiące, takie jak luty, użyjDate.new + 1.month
Rui Nunes
13

W przypadku Ruby 1.9 musiałem użyć:

Time.now.strftime("%B")
jpgeek
źródło
0

HTML Select month with 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
źródło