Time Diff Module

D

David Clements

------=_Part_50992_21857766.1137516497737
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

Anyone know of a module out there that will encapsulate differences in time=
?

Ideally I would want something like this:

d1 =3D DateTime.now + 2.hours + 2.minutes
d2 =3D DateTime.now

diff =3D d1-d2


puts "Diff: #{diff.hours}:#{diff.minutes}"


I have searched for examples and all of them seem to be doing this manually=
 
W

Wilson Bilkovich

J

Jonathan Leighton

Anyone know of a module out there that will encapsulate differences in time?

Ideally I would want something like this:

d1 = DateTime.now + 2.hours + 2.minutes
d2 = DateTime.now

diff = d1-d2


puts "Diff: #{diff.hours}:#{diff.minutes}"



I have searched for examples and all of them seem to be doing this manually.

Dave

Ruby on Rails' ActiveSupport::CoreExtensions::Numeric::Time module
supports this. The gem is activesupport. You might want to extract it
somehow to avoid getting the rest of the library if you don't need it.

Jon
 
A

ara.t.howard

Anyone know of a module out there that will encapsulate differences in time?

Ideally I would want something like this:

d1 = DateTime.now + 2.hours + 2.minutes
d2 = DateTime.now

diff = d1-d2


puts "Diff: #{diff.hours}:#{diff.minutes}"



I have searched for examples and all of them seem to be doing this manually.

i'm guessing the reason this has not been done generically is that it is
incredibly slippery. for instance, if i had

a = DateTime::new 1582, 8, 4
b = a + 1.day

then b should the the day '1582-08-15'. and

diff = b - a
p diff.days

should output either 10 or 1 - depending on how you look at it.

the reason is the fact that DateTime makes all the calender reforms between
julian and gregorian transparent and even handles them based on timezone. not
saying it could not be done, but it's tough and, afaik, hasn't been. see
ruby-1.8.4/lib/date.rb for details.

of course, activesupport give you Numeric#days, etc, but that is quite easy to
roll.

if the code you posted is pretty close you what you actually need then why not
simply use Time objects, converting to DateTime as needed using
DateTime::new(t.year, t.month, t.day... etc)?

harp:~ > cat a.rb
class Time
module Units
def __less__() "/" end
def __more__() "*" end
def milliseconds() self.send(__less__,1000) end; alias_method "millisecond", "milliseconds"
def seconds() self end; alias_method "second", "seconds"
def minutes() seconds.send(__more__,60) end; alias_method "minute", "minutes"
def hours() minutes.send(__more__,60) end; alias_method "hour", "hours"
def days() hours.send(__more__,24) end; alias_method "day", "days"
def weeks() days.send(__more__,7) end; alias_method "week", "weeks"
def months() weeks.send(__more__,4) end; alias_method "month", "months"
def years() months.send(__more__,12) end; alias_method "year", "years"
def decades() years.send(__more__,10) end; alias_method "decade", "decades"
def centuries() decades.send(__more__,10) end; alias_method "century", "centuries"
end
module DiffUnits
include ::Time::Units
def __less__() "*" end
def __more__() "/" end
end
alias_method "__delta__", "-"
def - other
ret = __delta__ other
ret.extend DiffUnits
ret
end
end
class Numeric
include ::Time::Units
end

now = Time::now
a = now
b = now + 2.hours + 2.minutes
d = b - a

require "yaml"
%w( seconds minutes hours days ).each{|m| y m => d.send(m)}


harp:~ > ruby a.rb
---
seconds: 7320.0
---
minutes: 122.0
---
hours: 2.03333333333333
---
days: 0.0847222222222222


hmmm. maybe i'll add this to alib...

cheers.

-a
 
A

ABHILASH M.A

David Clements wrote in post #23880:
Anyone know of a module out there that will encapsulate differences in
time?

Ideally I would want something like this:

d1 = DateTime.now + 2.hours + 2.minutes
d2 = DateTime.now

diff = d1-d2


puts "Diff: #{diff.hours}:#{diff.minutes}"



I have searched for examples and all of them seem to be doing this
manually.

Dave

There is a gem available to find the difference in a useful way.

https://rubygems.org/gems/time_diff

This will return a hash of difference in year, month, week, day, hour,
minute, second
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top