require 'date'
require 'time'
class Time
def to_s(format = :default)
case DATE_FORMATS[format]
when Proc then DATE_FORMATS[format].call(self)
when String then strftime(DATE_FORMATS[format]).strip
else to_default_s
end
end
end
#
# Custom time formats
#
# >> time.to_s(:stamp)
# => 5:23PM
#
# >> time.to_s(:short)
# => Dec 3, 2006
#
# >> time.to_s(:relative)
# => today
#
Time::DATE_FORMATS[:stamp] = '%l:%M%p'
Time::DATE_FORMATS[:short] = '%b %e, %Y'
Time::DATE_FORMATS[:relative] = Proc.new do |date|
date = Date.parse(date.to_s, true)
days = (date - Date.today).to_i
case true
when days >= 0 && days < 1 then 'today'
when days >= 1 && days < 2 then 'tomorrow'
when days >= -1 && days < 0 then 'yesterday'
when days.abs < 7 then "last " << date.strftime('%A').downcase
when days.abs < 182 then date.strftime('%A, %B %e')
else date.strftime('%A, %B %e, %Y')
end
end