Ruby code to get the date of next Monday (or any day of the week)

Given an input of, for example,

day = 'Monday'

how can I calculate the date of the next day?

def date_of_next(day)
  ...
end

Solution 1:

require 'date'

def date_of_next(day)
  date  = Date.parse(day)
  delta = date > Date.today ? 0 : 7
  date + delta
end

Date.today
#=>#<Date: 2011-10-28 (4911725/2,0,2299161)>
date_of_next "Monday"
#=>#<Date: 2011-10-31 (4911731/2,0,2299161)>
date_of_next "Sunday"
#=>#<Date: 2011-10-30 (4911729/2,0,2299161)>

Solution 2:

For anyone like me who came here looking for a solution in Rails to this problem, as of Rails 5.2 there is a much easier method to do this.

For anyone (like the original poster) not specifically using Rails, this functionality is available in the ActiveSupport gem.

To find the next occurring day of a week, we can simply write something like Date.today.next_occurring(:friday).

See the documentation for more details.