2010-10-04 14 views
6

Aylar önce almak için bir yol bulamıyorum (sınıf tanımlarını kullanarak). Saniyeler, günler ve dakikalar tamamdır, çünkü her zaman sabittirler. Ancak aylar her zaman sabit olmadığı için, ruby ​​için geçerli ayda kaç gün olduğunu bilmek için bir yol bilmem gerekiyor.Ruby'de aylar önce

+0

Not, bir saniyedeki saniye sayısı sabit değildir (gün ışığından yararlanma) –

+1

Gerçekten de, pedantik olmak istiyorsak, atlama süresiyle değiştirilebilecek bir kaç saniye vardır. Her ikisi de sıçrayan kurbağalarla karıştırılmamalıdır. http://en.wikipedia.org/wiki/Leap_second –

cevap

0

Bu, aradığınız şey mi?

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

Bu sayede sayısını verecekti: İki tarih arasındaki vardı kaç gün bilmeniz gerekiyorsa DaysIn(MonthNum)

+0

Ben * ne aradığını (nasıl "Aylar önce" yazıyor) ile daha fazla aylardır (aylar olarak dönecek) Oracles 'month_between' işlevi gibi iki tarih değeri arasındaki ondalık). Farklı ay uzunluklarını hesaba katıyor. http://www.techonthenet.com/oracle/functions/months_between.php – FrustratedWithFormsDesigner

1

, bugün ve geçen ayın aynı gün sayısı bunu yapabilirsin ki önceki aydaki günler. Eğer geçerli ay için gün sayısını bilmek istiyorsanız bunun yerine yapabilirsiniz:

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

Bu yanlış. Örneğin ilk gün, 31 Mart'ta başarısız olur. Bu 31 dönecek, ancak Şubat ayında (ki bu da Mart ayından önce gelir) asla 29 günden fazla olamaz.

irb(main):013:0> today = Date.parse '2011-03-31' => # irb(main):014:0> (today - today.prev_month).to_i => 31
DNNX

+0

Çok doğru, Tarih # prev_month öğesinin bir önceki ayın son gününü, önceki ayın son gününün sayısından daha büyük bir sayı ile her gün için döndüreceğinin farkında değildim (örneğin, 31 Mart 30 için) , 29 ve 28 #prev_month, 28 Şubat'ı döndürür. – Theo

8

Başvurunuz (örn Rails uygulaması) ActiveSupport kullanıyorsa, almak için

3.months.ago 

kullanabilirsiniz şimdiki tarih 3 aydan az.

+7

ActiveSupport olmadan, Date.today << 3'ü kullanabilirsiniz. – steenslag

+1

Vardiya operatörü harika! Bunu işaretlediğiniz için teşekkürler. – phatmann