# Can Ruby print out time difference (duration) readily?

Can Ruby do something like this?

irb(main):001:0> start = Time.now
=> Thu Nov 05 01:02:54 -0800 2009

irb(main):002:0> Time.now - start
=> 25.239

irb(main):003:0> (Time.now - start).duration
=> “25 seconds”
and similarly, report

23 minutes and 35 seconds
1 hour and 33 minutes
2 days and 3 hours
(either report the whole duration, up to how many seconds, or report up
to 2 numbers and units (if day and hour is reported, then no need to
tell how many minutes)

and similarly, report

23 minutes and 35 seconds
1 hour and 33 minutes
2 days and 3 hours
(either report the whole duration, up to how many seconds, or report up
to 2 numbers and units (if day and hour is reported, then no need to
tell how many minutes)

You can try something like below (change with conditional statements to
fit your requirements of upto 2 numbers):

class Time
def duration
Time.now - self
end
def duration_string
difference = duration
days = (difference/(360024)).to_i
hours = ((difference%(3600
24))/3600).to_i

``````mins = ((difference%(3600))/60).to_i

secs = (difference%60).to_i
"#{days} days, #{hours} hours, #{mins} minutes and #{secs} seconds"
``````

end
end

start = Time.new
sleep(5)
puts start.duration_string

On Nov 5, 4:09 am, Jian L. [email protected] wrote:

and similarly, report

23 minutes and 35 seconds
1 hour and 33 minutes
2 days and 3 hours
(either report the whole duration, up to how many seconds, or report up
to 2 numbers and units (if day and hour is reported, then no need to
tell how many minutes)

RichUnits also has a duration class. You can tell it what time
segments you want to use.

On Nov 5, 2:09 am, Jian L. [email protected] wrote:

and similarly, report

23 minutes and 35 seconds
1 hour and 33 minutes
2 days and 3 hours

This old thread discusses a similar topic.

Note that durations expressed in any unit greater than weeks (months,
years, etc.) are going to give you problems.

On Nov 5, 4:09 am, Jian L. [email protected] wrote:

Can Ruby do something like this?

irb(main):001:0> start =Time.now
=> Thu Nov 05 01:02:54 -0800 2009

irb(main):002:0>Time.now - start
=> 25.239

irb(main):003:0> (Time.now - start).duration
=> “25 seconds”

require ‘chronic_duration’
ChronicDuration.output(Time.now - start, :format => :long)