ชื่อเดือนนี้ (Date.today.month เป็นชื่อ)


115

ฉันกำลังใช้Date.today.monthเพื่อแสดงหมายเลขเดือน มีคำสั่งในการรับชื่อเดือนหรือไม่หรือต้องทำกรณีเพื่อรับชื่อเดือน?


คำตอบของ Dylan ยังคงใช้งานได้เหมือน Ruby 2.5.0
oneWorkingHeadphone

คำตอบ:


196

Date::MONTHNAMES[Date.today.month]จะให้คุณ "มกราคม" (คุณอาจต้องทำrequire 'date'ก่อน)


28
Date.today.strftime("%B")เป็นวิธีที่ดีกว่าในการทำเช่นนี้ imho และไม่เฉพาะเจาะจงสำหรับราง ดูคำตอบด้านล่างโดย leafo
Peter Berg

2
@PedroMorteRolo ยังคงใช้งานได้กับฉันบน Ruby 2.2.0 - อย่าลืมทำrequire 'date'ก่อน
Dylan Markow

121

คุณยังสามารถใช้ 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"

อย่างที่ฉันคิดคำตอบนี้ดีกว่าคำตอบอื่น ๆ เนื่องจาก I18n ส่งคืนชื่อเดือนในภาษาปัจจุบัน
Stepan Zakharov

80

คุณสามารถใช้strftime:

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

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


2
คำเตือนสำหรับทุกคนที่ใช้ Ruby 2 ต้องใช้Time.new.strftime("B")วันนี้ & strftime ถูกถอดจาก Date
Sanarothe

7
ไม่จริง. ทั้งสองอยู่ในสถานที่ที่มีทับทิม 2.0และทับทิม 2.1 โปรดทราบว่าคุณไม่สามารถใช้งานได้จนกว่าคุณrequire "date"จะอยู่ใน std-lib ไม่ใช่ core
pbyrne

16

หากคุณสนใจเกี่ยวกับภาษาคุณควรทำสิ่งนี้:

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

หรือI18n.l(Date.new, format: '%B')จะเริ่มในเดือนมกราคม หากคุณต้องการเพิ่มเดือนเช่นมีเดือนกุมภาพันธ์ให้ใช้Date.new + 1.month
Rui Nunes


0

HTML เลือกเดือนด้วย 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>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.