2016-05-12 3 views
0

Я пытаюсь реализовать метод, возвращающий набор дат для ближайшего n дня недели, например. Понедельник.Получение дат для ближайшего n дня недели

Мой метод:

def date_of_next(day, weeks) 
    date = Date.parse(day) 
    if date > Date.today 
     delta = 0 
     date + delta 
    else 
     (0..weeks.to_i).each do |i| 
     delta = 7 * i 
     date + delta 
     end 
    end 
    end 

Я не имею ни малейшего представления, чтобы правильно восстановить этот метод. Не могли бы вы помочь мне? Спасибо заранее.

Мой прогноз возвращения:

Код выбора:

= f.select :date_of_training, label: "Data", 
    collection: @trainer.work_schedules.map{ |tw| [tw.next_n_days(4, "Monday"), tw.id]}, 
    prompt: "Wybierz datę" 

Результат:

2016-05-16 
2016-05-16 
2016-05-30 
2016-06-06 
+1

Я не уверен, что метод должен возвращать. Может ли отображаться ожидаемый результат при вызове метода с разными значениями аргументов? – Stefan

ответ

1

наивная реализация:

def next_n_days(amount, day_of_week) 
    (Date.today...Date.today+7*amount).select do |d| 
    d.wday == day_of_week 
    end 
end 

#  three ⇓ ⇓ Fridays 
next_n_days 3, 5 
#⇒ [ 
# [0] #<Date: 2016-05-13 ((2457522j,0s,0n),+0s,2299161j)>, 
# [1] #<Date: 2016-05-20 ((2457529j,0s,0n),+0s,2299161j)>, 
# [2] #<Date: 2016-05-27 ((2457536j,0s,0n),+0s,2299161j)> 
# ] 

Более точная реализация:

def next_n_days(amount, day_of_week) 
    nearest = (Date.today...Date.today+7).detect { |d| d.wday == day_of_week } 
    nearest.step(nearest+7*amount-1, 7).to_a 
end 
+0

что-то не так, потому что переменная ближайшая - это ноль, я проверил количество, а day_of_week имеет значение. –

+0

Какое значение имеет 'day_of_week'? Предполагается, что он соответствует формату 'wday' (' 0' для воскресенья, '1' для понедельника и т. Д.) ** OK **, с вашим обновлением, я вижу, что вы хотите передавать такие имена, как' 'Monday". Он не был указан в исходном вопросе, поскольку он был опубликован, поэтому я оставляю это как упражнение для вас. – mudasobwa

Смежные вопросы