2012-08-06 5 views
24

Oto, co chciałbym, aby wyświetlić:Formatowanie obiekt daty, aby wyświetlić ludzkiego datę czytelny

May 13, 2012 

Oto, co jest wyświetlane:

2012-05-13 

Szukałem kilku odpowiedzi i to doprowadziło me do "Formatting Dates and Floats in Ruby", gdzie wymienia się możliwe rozwiązanie:

<p class="date"><%= @news_item.postdate.to_s("%B %d, %Y") %></p> 

jednak to nie zmienia th e wydajność w ogóle. Brak błędów debugowania lub wyjątków.

mogę to zrobić i działa perfekcyjnie:

<p class="date"><%= Time.now.to_s("%B %d, %Y") %></p> 

Oto mój plik migracji (aby zobaczyć, jakiego rodzaju dane użyłem):

class CreateNewsItems < ActiveRecord::Migration 
    def change 
    create_table :news_items do |t| 

     t.date :postdate 

     t.timestamps 
    end 
    end 
end 

Odpowiedz

44

Date.to_s nie jest taka sama jak Time.to_s . Twój postdate jest Date, tak więc warto spojrzeć na strftime zamiast:

postdate.strftime("%B %d, %Y") 

Albo nawet spojrzeć, aby dodać swój własny format daty zwyczaj aplikacji szyn:
Need small help in converting date format in ruby

+0

Zobacz również - http://www.ruby-doc.org/core-1.9.3/Time.html#method-i-strftime – JGrubb

+8

Jedna drobna uwaga: 'strftime ("% B% -D ,% Y ")' jest nieco ładniejsza dla czytelności człowieka. '% -d' usuwa wiodącą wartość 0, tj. 06 maja 2013 => 6 maja 2013. –

29

Funkcją to_formatted_s już ma niektóre popularne formaty czytelne dla ludzi dla obiektów DateTime w Railsach.

datetime.to_formatted_s(:db)   # => "2007-12-04 00:00:00" 
datetime.to_formatted_s(:short)   # => "04 Dec 00:00" 
datetime.to_formatted_s(:long)   # => "December 04, 2007 00:00" 
datetime.to_formatted_s(:long_ordinal) # => "December 4th, 2007 00:00" 
datetime.to_formatted_s(:rfc822)  # => "Tue, 04 Dec 2007 00:00:00 +0000" 
datetime.to_formatted_s(:iso8601)  # => "2007-12-04T00:00:00+00:00" 
+5

, która jest aliasowana na _to_s_. –