How can I find the number of days between two Date objects in Ruby? How can I find the number of days between two Date objects in Ruby? ruby ruby

How can I find the number of days between two Date objects in Ruby?


Subtract the beginning date from the end date:

endDate - beginDate 


irb(main):005:0> a = Date.parse("12/1/2010")=> #<Date: 4911063/2,0,2299161>irb(main):007:0> b = Date.parse("12/21/2010")=> #<Date: 4911103/2,0,2299161>irb(main):016:0> c = b.mjd - a.mjd=> 20

This uses a Modified Julian Day Number.

From wikipedia:

The Julian date (JD) is the interval of time in days and fractions of a day since January 1, 4713 BC Greenwich noon, Julian proleptic calendar.


This may have changed in Ruby 2.0

When I do this I get a fraction. For example on the console (either irb or rails c)

2.0.0-p195 :005 > require 'date' => true 2.0.0-p195 :006 >  a_date = Date.parse("25/12/2013") => #<Date: 2013-12-25 ((2456652j,0s,0n),+0s,2299161j)> 2.0.0-p195 :007 >  b_date = Date.parse("10/12/2013") => #<Date: 2013-12-10 ((2456637j,0s,0n),+0s,2299161j)> 2.0.0-p195 :008 > a_date-b_date => (15/1) 

Of course, casting to an int give the expected result

2.0.0-p195 :009 > (a_date-b_date).to_i => 15 

This also works for DateTime objects, but you have to take into consideration seconds, such as this example

2.0.0-p195 :017 >   a_date_time = DateTime.now => #<DateTime: 2013-12-31T12:23:03-08:00 ((2456658j,73383s,725757000n),-28800s,2299161j)> 2.0.0-p195 :018 > b_date_time = DateTime.now-20 => #<DateTime: 2013-12-11T12:23:06-08:00 ((2456638j,73386s,69998000n),-28800s,2299161j)> 2.0.0-p195 :019 > a_date_time - b_date_time => (1727997655759/86400000000) 2.0.0-p195 :020 > (a_date_time - b_date_time).to_i => 19 2.0.0-p195 :021 > c_date_time = a_date_time-20 => #<DateTime: 2013-12-11T12:23:03-08:00 ((2456638j,73383s,725757000n),-28800s,2299161j)> 2.0.0-p195 :022 > a_date_time - c_date_time => (20/1) 2.0.0-p195 :023 > (a_date_time - c_date_time).to_i => 20