2010-06-11 33 views
37

vì vậy tôi tạo ra theo quan điểm của tôi:Tôi làm cách nào để có tên của tháng trong ruby ​​trên Rails?

<%=date=Date.today%> 

Làm thế nào để tôi lấy tên của tháng hết hạn không? Tôi đã cố gắng làm sth như

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

Nhưng không thành công. Tôi tiếp tục gặp lỗi: hằng số không được khởi tạo ActionView::Base::CompiledTemplates::MONTHNAMES

Làm cách nào để khởi tạo hằng số hoặc có cách nào khác để lấy tên ra khỏi định dạng ngày không?

sẽ đánh giá cao mọi câu trả lời!

Trả lời

85

Ref this

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

nếu

@date >> Fri, 11 Jun 2010 

sau đó

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

Tôi muốn có 'Date.today.month_name'. – Chloe

+1

@Chloe: lớp Ngày; def month_name; self.strftime ("% B"); kết thúc; end – MustModify

4

Nếu bạn có một định dạng/thời gian cụ thể tùy chỉnh ngày mà bạn cần phải sử dụng lặp đi lặp lại thì bạn có thể mở rộng Hỗ trợ ngày/giờ của ActiveSupport.

ví dụ: nếu bạn định nghĩa như sau trong cấu hình của bạn/environment.rb

ActiveSupport::CoreExtensions::Time::Conversions::DATE_FORMATS.merge!(:full_english => "%A %B %d, %Y at %I:%M %p") 

sau đó khi bạn gọi Time.now.to_s(:full_english) trong quan điểm của bạn, bạn sẽ nhận được một cái gì đó như:

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

phương pháp strftime Ruby cũng là tài liệu tại http://apidock.com/ruby/Time/strftime

+2

Nhìn vào bộ chuyển đổi ngày/giờ to_formatted_s. Điều này cho phép bạn định nghĩa các định dạng ngày tháng (như ': month_only') và sử dụng date.to_formatted_s (: month_only) để bạn có được tái sử dụng tối đa cho việc sử dụng strftime của bạn. –

24

Nếu bạn chỉ tìm kiếm tên tháng, hằng số Date::MONTHNAMES được cung cấp bởi đường ray là giải pháp dễ dàng nhất cho bạn:

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

Chọn những gì bạn muốn

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

Kết quả:

=> "January"

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

Kết quả:

=> "Jan"

Đối với hầu hết các câu hỏi ngày liên quan tiếp tục của bạn, tham khảo liên kết này http://www.foragoodstrftime.com/

1

Nếu bạn muốn có một tên tháng cục bộ, hãy thử:

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

Ví dụ:

I18n.t('date.month_names')[12] #=> "Dezembro" 
Các vấn đề liên quan