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)

···

--
Posted via http://www.ruby-forum.com/.

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)

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/(3600*24)).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

···

_________________________________________________________________
Hotmail: Trusted email with Microsoft's powerful SPAM protection.
http://clk.atdmt.com/GBL/go/177141664/direct/01/
http://clk.atdmt.com/GBL/go/177141664/direct/01/

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

# => "2 minutes 23 seconds"

See GitHub - henrypoydar/chronic_duration: A simple Ruby natural language parser for elapsed time

···

On Nov 5, 4:09 am, Jian Lin <blueskybre...@gmail.com> 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"

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

···

On Nov 5, 4:09 am, Jian Lin <blueskybre...@gmail.com> 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"
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)

This old thread discusses a similar topic.
http://groups.google.com/group/comp.lang.ruby/browse_thread/thread/e51d23dadacc03fa

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

···

On Nov 5, 2:09 am, Jian Lin <blueskybre...@gmail.com> 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"
and similarly, report

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