2011-10-28 10 views

Respuesta

74
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)> 
+0

'Date.parse (day)' truco impresionante ... antes de esta respuesta no lo sabía .. +1 –

+0

Increíble, gracias – joseramonc

12

Para cosas como esta confío en la biblioteca chronic.

código de The Ruby sería:

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

Sé que esto es una entrada antigua, pero me encontré con un par de métodos para obtener rápidamente el día anterior y 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 
+1

en su ejemplo, usted utilizó "5" como el día de la semana, pero escribió el lunes como el nombre de la variable. Creo que quisiste usar "viernes" – schpet

+0

@PETER: gracias por atrapar que –

12

Si está utilizando rieles puede utilizar Date.today.sunday para el domingo o Date.today.monday para el lunes. Y luego Date.today.sunday - 1.day para el sábado, etc.

+0

'Date.today' solo está disponible si estás utilizando Rails o has incluido ActiveSupport. Incluso entonces 'Date.today.monday' da' undefined method' – max

+0

Esto realmente funciona para mí. 'irb (main): 001: 0> Date.today.monday => Lun, 17 Ago 2015' –

+3

'Date.today.monday' debería funcionar, pero dicho método solo existe para' # lunes', no el otro días de la semana. http://www.rubydoc.info/docs/rails/4.0.0/DateAndTime/Calculations#monday-instance_method – bigtex777

Cuestiones relacionadas