J'aime Bartosz réponse, mais bon, puisque c'est sur les Rails, nous parlons, nous allons franchir une étape dans sournois. (Edit: Bien que j'allais juste monkeypatch la méthode suivante, il s'avère qu'il est le moyen le plus propre.)
DateTime
des cas ont un to_formatted_s
méthode fournie par ActiveSupport, qui prend un seul symbole en tant que paramètre et, si ce symbole est reconnu comme valide d'un format prédéfini, retourne une Chaîne de caractères avec la mise en forme appropriées.
Ces symboles sont définis par Time::DATE_FORMATS
, ce qui est un hachage de symboles en forme de chaînes pour la mise en forme standard de la fonction... 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
Mais bon, si vous ne pouvez pas résister à l'occasion de monkeypatch, vous pouvez toujours donner qu'une interface épurée:
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