Я не могу выполнить это прямо сейчас, так что простите меня, если есть синтаксические ошибки.
Ответ 2
Это немного сложно, но не так сложно рассчитать.
Используйте ActiveSupport::DateAndTimeCalculations#end_of_week для вычисления конца недели, этот метод принимает параметр start_day, который используется для указания начального дня неделю (по умолчанию :monday). Они даже внедрили метод sunday.
Трюк заключается в следующем: если вы хотите рассчитать ближайший понедельник, вы можете рассчитать его как конец недели, который начинается во вторник (Tue = > 1-й день, Wed = > 2-й день,..., пн = > 7-й день, который также является концом недели).
Итак, все, что вам нужно сделать, это:
# it will return current date if today is Monday and nearest Monday otherwise
Date.today.end_of_week(:tuesday)
Ответ 3
Предполагая, что вы хотите оба направления: Date.today.beginning_of_week + 7*(Date.today.wday/5)
Ответ 4
Я знаю, что это старый поток, но всегда приятно держать его в курсе будущих ищущих.
Предположим, сегодня говорят, что пятница 19 августа. Все, что я делаю, чтобы получить мой следующий понедельник:
monday = Date.today.monday
Затем оттуда вы можете вернуться неделю или вперед в неделю следующим образом:
Неподтвержденный, так что вам, возможно, понадобится finetune, но здесь вы идете:
def Date.nearest_monday
today = Date.today
wday = today.wday
if wday > 4 # over the half of the week
today + (7 - wday) # next monday
else
today - (1 + wday) # previous monday
end
end