I have a range with a start_date, end_date and I want to get the same day of each month for the whole range, so here starting on the 30th of January I should get the 30th of each month:
start_date = Date.new(2019, 1, 30)
end_date = Date.new(2019, 12, 30)
range = (start_date...end_date)
dates = range.step(30).map(&:to_date)
dates
#=> [Wed, 30 Jan 2019,
#    Fri, 01 Mar 2019,
#    Sun, 31 Mar 2019,
#    Tue, 30 Apr 2019,
#    Thu, 30 May 2019,
#    Sat, 29 Jun 2019,
#    Mon, 29 Jul 2019,
#    Wed, 28 Aug 2019,
#    Fri, 27 Sep 2019,
#    Sun, 27 Oct 2019,
#    Tue, 26 Nov 2019,
#    Thu, 26 Dec 2019]
I was using something like this for weeks but with months when you get to February for example it of course fails, so I would have to adjust to 28th.
I know I could loop and look at the month and do adjustments based on the start_date but it feels like a bad idea.