我如何findRuby中两个Date对象之间的天数?

我如何find两个Date对象之间的天数?

从结束date减去开始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 

这使用修改的朱利安天数 。

从维基百科 :

Juliandate(JD)是BC公元前4713年1月1日格林尼治中午,Julian预防日历的时间间隔(以天和一小部分为单位)。

这可能在Ruby 2.0中发生了变化

当我这样做,我得到一小部分。 例如在控制台(irb或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) 

当然,铸造到一个整数给出了预期的结果

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

这也适用于DateTime对象,但您必须考虑秒,例如这个例子

 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 

在Ruby 2.1.3中,事情已经发生了变化:

 > endDate = Date.new(2014, 1, 2) => #<Date: 2014-01-02 ((2456660j,0s,0n),+0s,2299161j)> > beginDate = Date.new(2014, 1, 1) => #<Date: 2014-01-01 ((2456659j,0s,0n),+0s,2299161j)> > days = endDate - beginDate => (1/1) > days.class => Rational > days.to_i => 1 

尝试这个:

 num_days = later_date - earlier_date 

所有这些都把我引向了正确的结果,但是我却结束了

 DateTime.now.mjd - DateTime.parse("01-01-1995").mjd 

这个怎么样?

 (beginDate...endDate).count 

范围是一套独特的连续剧。 而...是一个独特的范围文字。

所以beginDate..(endDate - 1)是一样的。 除非。

beginDate等于endDate的情况下,第一个元素将被排除,因为唯一性和...将排除最后一个。 所以如果我们想.count今天和今天之间的date,它将返回0。

这对我工作:

 (endDate - beginDate).to_i 

days =(endDate – beginDate)/(60 * 60 * 24)