2012-03-14 48 views
1

我想有這樣的事情:紅寶石 - 日期範圍(從第一本月底至下月一日)

例如:如果第一個日期爲2012-02-01(YYYY-MM-DD ),下一個日期必須是2012-03-01。所以增加這個月份。 但是,如果日期是2012-12-01,則下一個日期必須是2013-01-01。我設法做到nextMonth=((thisMonth) mod 12)+1並將下一個年份設置爲thisYear+1如果thisMonth = 12

我的問題是:我可以很容易地使用日期庫嗎?

回答

3

您可以使用Date#>>

>> require 'date' 
=> true 
>> d = Date.new(2012,12,1) 
=> #<Date: 2012-12-01 ((2456263j,0s,0n),+0s,2299161j)> 
>> d >> 1 
=> #<Date: 2013-01-01 ((2456294j,0s,0n),+0s,2299161j)> 
>> (d..d>>1) 
=> #<Date: 2012-12-01 ((2456263j,0s,0n),+0s,2299161j)>..#<Date: 2013-01-01 ((2456294j,0s,0n),+0s,2299161j)> 

如果開始日期是不是在第一個月,但你仍然需要結束日期是第一個下一個月的,你可以這樣做:

>> d = Date.new(2012,12,12) 
=> #<Date: 2012-12-12 ((2456274j,0s,0n),+0s,2299161j)> 
>> (d>>1) - (d.mday - 1) 
=> #<Date: 2013-01-01 ((2456294j,0s,0n),+0s,2299161j)> 
+0

太棒了,我從來不知道這件事! +1 – 2012-03-14 19:00:20

+0

邁克爾感謝您的答案。我怎樣才能得到這個日期?所以如果我在2012年12月23日,我想要2012/12/01做這個手術? – 2012-03-14 19:19:45

+0

@HommerSmith這將是'd - (d.mday - 1)'。 :-)請不要忘記加註和/或接受這個答案,這是這樣做的禮節。 – 2012-03-14 19:48:58