Мне нравится ответ Бартоша, но, эй, так как это Rails, о котором мы говорим, давайте сделаем еще один шаг в хитрости. (Правка: хотя я собирался просто обезьянить патч следующий метод, оказывается, есть более чистый способ.)
DateTime
экземпляры имеют to_formatted_s
метод, предоставленный ActiveSupport, который принимает один символ в качестве параметра и, если этот символ распознается как допустимый предопределенный формат, возвращает строку с соответствующим форматированием.
Эти символы определены с помощью Time::DATE_FORMATS
, который является хешем символов либо для строк для стандартной функции форматирования ..., либо для процедур. 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
Но, эй, если вы не можете устоять перед возможностью сделать monkeypatch, вы всегда можете придать этому более чистый интерфейс:
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