2010-05-10 70 views
4

上個月有沒有內置功能,和今天一樣?示例:如何在ruby中獲取上個月的今天的日子?

2010/05/02 -> 2010/04/02 
2010/05/15 -> 2010/04/15 
2010/05/31 -> 2010/04/30 

謝謝!

+3

什麼是標準的'2010/04/30'是 「相同的」 爲'2010/05/31'? :) – deceze 2010-05-10 03:29:22

+0

如果上個月沒有與當前月份一樣大的日期,請使用_that_月的最大日期數字。也應考慮閏年,即大多數2月份的最後一天是28日,而有些則是29日。 thx – ohho 2010-05-10 04:08:53

回答

11

您可以用<<減去整個月份。

>> d = Date.parse('2010-05-31') 
=> #<Date: 4910695/2,0,2299161> 
>> d.to_s 
=> "2010-05-31" 
>> (d<<1).to_s 
=> "2010-04-30" 

More info

+0

太棒了!根本沒有注意到有一個「<<」。 – ohho 2010-05-10 04:49:05

+1

直到幾周前我也沒有。正如我確信你可以從'Date'的文檔中看出來,如果你正朝另一個方向發展,那麼也有'>>'。 – theIV 2010-05-10 04:56:56

0

Ruby's date class允許您從特定日期加減日。

1

你可以例如設置定時對象

old_time = Time.now 

然後創建基於

new_time = Time.local(old_time.year, (old_time.month - 1), old_time.day, old_time.hour, old_time.min, old_time.sec) 

但是一個新的時間對象,deceze指出,什麼是5/31的標準成爲4/30? 在irb中,4/31'溢出'至5/01。

3

您可以嘗試使用

Time.parse('2010/05/31').months_since(-1)

3

你可以這樣做:

(Date.today - 1.month).strftime("%Y/%m/%d") 
+0

我不知道上面提到的'<<'運算符,但老實說' - 1.month'更具可讀性。 – jwadsack 2014-02-28 17:26:35

相關問題