2010-10-04 72 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