Вы можете использовать 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)>