Código de Ruby para obtener la fecha del próximo lunes (o cualquier día de la semana)

Dada una entrada de, por ejemplo,

day = 'Monday' 

¿cómo puedo calcular la fecha del day ?

 def date_of_next(day) ... end 

 require 'date' def date_of_next(day) date = Date.parse(day) delta = date > Date.today ? 0 : 7 date + delta end Date.today #=># date_of_next "Monday" #=># date_of_next "Sunday" #=># 

Sé que esta es una publicación anterior, pero se me ocurrió un par de métodos para obtener rápidamente el día anterior y el siguiente de la semana.

 # date is a Date object and day_of_week is 0 to 6 for Sunday to Saturday require 'Date' def get_next_day(date, day_of_week) date + ((day_of_week - date.wday) % 7) end def get_previous_day(date, day_of_week) date - ((date.wday - day_of_week) % 7) end puts today = Date.today # 2015-02-24 puts next_friday = get_next_day(today, 5) # 2015-02-27 puts last_friday = get_previous_day(today, 5) # 2015-02-20 

Para cosas como esta confío en la biblioteca crónica .

El código de Ruby sería:

 def date_of_next(day) Chronic.parse("next #{day}") end 

Si usa raíles, puede usar Date.today.sunday para el domingo o Date.today.monday para el lunes. Y luego Date.today.sunday - 1.day for Saturday, etc.

Para cualquier persona como yo que haya venido buscando una solución en Rails para este problema, a partir de Rails 5.2 hay un método mucho más fácil para hacer esto.

Para cualquier persona (como el póster original) que no utilice Rails específicamente, esta funcionalidad está disponible en la gem ActiveSupport .

Para encontrar el siguiente día de una semana, simplemente podemos escribir algo como Date.today.next_occurring(:friday) .

Ver la documentación para más detalles.