The date module is accessible via the webhelpers.rails module.
Reports the approximate distance in time between two datetime objects or integers as seconds.
Set include_seconds to True for more more detailed approximations when distance < 1 min, 29 secs
Distances are reported based on the following table:
0 <-> 29 secs => less than a minute 30 secs <-> 1 min, 29 secs => 1 minute 1 min, 30 secs <-> 44 mins, 29 secs => [2..44] minutes 44 mins, 30 secs <-> 89 mins, 29 secs => about 1 hour 89 mins, 29 secs <-> 23 hrs, 59 mins, 29 secs => about [2..24] hours 23 hrs, 59 mins, 29 secs <-> 47 hrs, 59 mins, 29 secs => 1 day 47 hrs, 59 mins, 29 secs <-> 29 days, 23 hrs, 59 mins, 29 secs => [2..29] days 29 days, 23 hrs, 59 mins, 30 secs <-> 59 days, 23 hrs, 59 mins, 29 secs => about 1 month 59 days, 23 hrs, 59 mins, 30 secs <-> 1 yr minus 31 secs => [2..12] months 1 yr minus 30 secs <-> 2 yrs minus 31 secs => about 1 year 2 yrs minus 30 secs <-> max time or date => over [2..X] years
With include_seconds set to True and the difference < 1 minute 29 seconds:
0-4 secs => less than 5 seconds 5-9 secs => less than 10 seconds 10-19 secs => less than 20 seconds 20-39 secs => half a minute 40-59 secs => less than a minute 60-89 secs => 1 minute
Examples:
>>> from datetime import datetime, timedelta >>> from_time = datetime.now() >>> distance_of_time_in_words(from_time, from_time + timedelta(minutes=50)) 'about 1 hour' >>> distance_of_time_in_words(from_time, from_time + timedelta(seconds=15)) 'less than a minute' >>> distance_of_time_in_words(from_time, from_time + timedelta(seconds=15), include_seconds=True) 'less than 20 seconds'
Note: distance_of_time_in_words calculates one year as 365.25 days.
Like distance_of_time_in_words, but where to_time is fixed to datetime.now().
See the source for more information.