Search code examples
ruby-on-railsrubydatedatetime

Ruby how can i get date of Monday after a given date


Given A Day i-e Monday and a Date e.g: Sat, 09 Aug 2014

how can i get the date of Monday coming immediately after given Date

Update:

def get_date_after(date, day)
    return date if date.wday == day.to_date.wday
    days_difference = (date - day.to_date).to_i
    result = day.to_date + days_difference + (day.to_date.wday - date.wday)
    result = result + 1.week if result.to_date < date
end

I was looking for something like above method, calling it would return the date of the day passed coming immediately after the date passed

get_date_after(DateTime.parse("15/09/2014").to_date, "Wednesday") #=> 17/09/2014

Solution

  • The chronic gem allows you to parse date expressions, e.g. Chronic.parse("next Monday"). You can add a reference date with the now option. Here's how it could be used for your method:

    def get_date_after(date, day)
      Chronic.parse("next #{day}", now: date)
    end