Gosto da resposta de Bartosz, mas ei, já que estamos falando do Rails, vamos dar um passo em desonesto. (Edit: Embora eu fosse apenas monkeypatch o método a seguir, verifica-se que existe uma maneira mais limpa.)
DateTime
as instâncias têm um to_formatted_s
método fornecido pelo ActiveSupport, que usa um único símbolo como parâmetro e, se esse símbolo for reconhecido como um formato predefinido válido, retornará uma String com a formatação apropriada.
Esses símbolos são definidos por Time::DATE_FORMATS
, que é um hash de símbolos para cadeias de caracteres para a função de formatação padrão ... ou procs. Bwahaha.
d = DateTime.now #Examples were executed on October 3rd 2008
Time::DATE_FORMATS[:weekday_month_ordinal] =
lambda { |time| time.strftime("%a %b #{time.day.ordinalize}") }
d.to_formatted_s :weekday_month_ordinal #Fri Oct 3rd
Mas, ei, se você não consegue resistir à oportunidade de monkeypatch, sempre pode oferecer uma interface mais limpa:
class DateTime
Time::DATE_FORMATS[:weekday_month_ordinal] =
lambda { |time| time.strftime("%a %b #{time.day.ordinalize}") }
def to_my_special_s
to_formatted_s :weekday_month_ordinal
end
end
DateTime.now.to_my_special_s #Fri Oct 3rd