2つのDateオブジェクト間の日数を見つけるにはどうすればよいですか?
終了日から開始日を引きます:
endDate - beginDate
これは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)
もちろん、intにキャストすると期待される結果が得られます
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
これはどう?
(beginDate...endDate).count
範囲は一意のシリアルのセットです。そして、...
は排他的な範囲リテラルです。
したがって、beginDate..(endDate - 1)
は同じです。例外ではありません。
beginDateがendDateと等しい場合、一意性のために最初の要素が除外され、...
は最後の要素を除外します。したがって、今日から今日までの日付を.count
したい場合、0を返します。
これは私のために働いた:
(endDate - beginDate).to_i
これを試して:
num_days = later_date - earlier_date
これらはすべて私を正しい結果に導きましたが、
DateTime.now.mjd - DateTime.parse("01-01-1995").mjd
日=(endDate-beginDate)/(60 * 60 * 24)