如何找到两个Date对象之间的天数?
答案 0 :(得分:155)
从结束日期减去开始日期:
endDate - beginDate
答案 1 :(得分:93)
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
这使用Modified Julian Day Number。
来自wikipedia:
朱利安日期(JD)是自公元前4713年1月1日格林威治中午,朱利安保佑日历以来的时间间隔(以天为单位)。
答案 2 :(得分:48)
这在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
答案 3 :(得分:26)
在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
答案 4 :(得分:12)
这个怎么样?
(beginDate...endDate).count
Range是一组独特的连续剧。
...
是一个独有的Range文字。
所以beginDate..(endDate - 1)
是一样的。除非不是。
如果 beginDate 等于 endDate ,则会因为唯一性而排除第一个元素,...
将排除最后一个元素。因此,如果我们希望今天和今天之间的.count
日期将返回0。
答案 5 :(得分:6)
试试这个:
num_days = later_date - earlier_date
答案 6 :(得分:6)
所有这些都引导我找到正确的结果,但我结束了
DateTime.now.mjd - DateTime.parse("01-01-1995").mjd
答案 7 :(得分:6)
这对我有用:
(endDate - beginDate).to_i
答案 8 :(得分:0)
天=(endDate - beginDate)/(60 * 60 * 24)
答案 9 :(得分:0)
好吧,也要注意“之间”的意思...
days_apart = (to - from).to_i # from + days_apart = to
total_days = (to - from).to_i + 1 # number of "selected" days
in_between_days = (to - from).to_i - 1 # how many days are in between from and to, i.e. excluding those two days