Adding your own datetime formats to Rails
An aspect of Rails that I adore is how it has a place for nearly everything you need to do. One of those things is to format dates/times using the strftime
method. Instead of tucking away custom strftime
patterns in constants, you can configure them onto the native Rails formatter, accessed via time.to_s(:format_name)
DateTime formats are shared with Time and stored in the Time::DATE_FORMATS
hash. Use your desired format name as the hash key and either a strftime
string or Proc instance that takes a time or datetime argument as the value.
# config/initializers/time_formats.rb
Time::DATE_FORMATS[:month_and_year] = '%B %Y'
Time::DATE_FORMATS[:short_ordinal] = lambda { |time| time.strftime("%B #{time.day.ordinalize}") }
Here's one of the formats that I've been using lately, to get my times into a more familiar form.
Time::DATE_FORMATS[:short_time] =
lambda { |time| time.strftime('%I:%M%p').gsub('AM','am').gsub('PM','pm').gsub(':00','') }