2010-12-21 153 views

回答

140

從結束日期減去開始日期:

endDate - beginDate 
+2

覺得你的意思是減去結束日期的開始日期:) – Nader 2011-11-24 00:30:14

+74

種虎頭蛇尾吧? – Brig 2011-12-17 04:45:59

+17

注意:如果您在irb中使用Wirble(將輸出着色),則有理數將有1連接到結尾。哎呀!你可能想用to_i將結果轉換爲整數 – jwal 2012-01-24 18:07:15

5

試試這個:

num_days = later_date - earlier_date 
88
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

Julian日期(JD),是自1月1日的天數,每天的分數間隔時間,4713 BC格林威治中午,儒略曆proleptic。

4

所有這些把我領到了正確的結果,但我清盤做

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

這可以用Ruby 2.0

已經改變了。當我這樣做,我得到一小部分。例如在控制檯上(無論是IRB或滑軌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 
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 
-1

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

5

這個怎麼樣?

(beginDate...endDate).count 

該範圍是一套獨特的連續劇。 和...是一個獨特的範圍文字。因此beginDate..(endDate - 1)是相同的。不是。

在情況下,當BEGINDATE等於結束日期,第一元件將被排除的,因爲唯一性和...將排除最後一個。因此,如果我們想今天和今天之間.count日期則返回0。

2

這爲我工作:

(endDate - beginDate).to_i 
相關問題