DateCasually

If you’ve always expected the Rails date helpers to say “Today”, “Yesterday” or “10 days ago” when asked about a specific date, then it’s time to date casually.

I’ve never liked (and always seem to forget) the name of the Rails distance_of_time_in_words_to_now helper method. Additionally it doesn’t handle obvious translations such as “today”, “tomorrow” or “yesterday” and doesn’t determine if a date is in the future (“10 days from now”) or the past (“10 days ago”).

Quick Examples

Date.today.casual 
  #=> 'today'

(Date.today + 1).casual 
  #=> 'tomorrow'

(Date.today - 1).casual 
  #=> 'yesterday'

The :as option

If you’d like to change what increments of time DateCasually returns you can use the :as option.

(Date.today + 1).casual(:as => :months) 
  #=> 'less than a month from now'

You can also pass in multiple options:

(Date.today + 12).casual(:as => :days, :months, :years) 
  #=> 'tomorrow'

The default :as options for DatCasually are:

(Date.today + 1).casual(:as => :days, :weeks, :months, :years)

If you’d change DateCasually globally, do this:

DateCasually::Config.as = :months, :years

i18n

DateCasually hooks into the i18n gem, but currently only supports English.

Dependencies

  • i18n

  • chronic (_only used in the test suite_)

  • timecop (_only used in the test suite_)

Roadmap

  • timezone support

  • configurable start of week

  • set up config class to handle global options (such as :include)

  • spanish translations (and others if people provide them)

  • configurable ranges (maybe…)