2010-10-04 85 views
6

我無法弄清楚一種方法(使用類定義)得到幾個月前。秒,日和分鐘都很好,因爲它們始終是常量。然而,由於月份並不總是不變,所以我需要知道一種方法讓紅寶石瞭解當月有多少天。幾個月前在ruby

+0

請注意,一天中的秒數不是固定的(夏令時) – 2010-10-04 17:22:20

+1

如果我們想要真正迂腐,可能會被閏盤取代,也有閏秒。這兩者都不應該與跳躍青蛙混淆。 http://en.wikipedia.org/wiki/Leap_second – 2010-10-04 21:50:38

回答

0

這是你在找什麼? DaysIn(MonthNum)

+0

我認爲他在找什麼(通過他如何說「幾個月前」)更像是Oracles'months_between'函數,它將返回月數(作爲十進制)在兩個日期值之間。它考慮到不同的月份長度。 http://www.techonthenet.com/oracle/functions/months_between.php – FrustratedWithFormsDesigner 2010-10-04 16:05:27

1

如果您需要知道多少天有兩個日期之間都在,說今天和上個月相同的日數,你可以這樣做:

(Date.today - Date.today.prev_month).to_i 

這會給你的數量前一個月的天數。如果你想知道的天當月的數量,您可以改爲做:

(Date.today.next_month - Date.today).to_i 
+0

這是錯誤的。例如,如果今天是3月31日,則第一個案件將失敗。這將返回31,然而在2月(這是從月前到3月)永遠不會超過29天。

irb(main):013:0> today = Date.parse '2011-03-31' => # irb(main):014:0> (today - today.prev_month).to_i => 31
DNNX 2010-10-04 16:57:14

+0

非常真實的,我並沒有意識到,日期#prev_month將返回前一個月的最後一天,每天有許多比前一個月(例如最後一天的數量多30 3月31日,29和28 #prev_month返回2月28日。 – Theo 2010-10-06 07:22:18

8

如果應用程序使用的ActiveSupport(比如Rails應用程序),你可以使用

3.months.ago 

得到當前日期少於3個月。

+7

如果沒有ActiveSupport,可以使用Date.today << 3. – steenslag 2010-10-04 18:11:46

+1

移位運算符很棒!謝謝指出這一點。 – phatmann 2013-01-23 19:30:57