Учитывая ввод, например,
day = 'Monday'
как я могу рассчитать дату day
?
def date_of_next(day)
...
end
Учитывая ввод, например,
day = 'Monday'
как я могу рассчитать дату 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: 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)>
Я знаю, что это старый пост, но я придумал пару методов, чтобы быстро получить предыдущий и следующий день недели.
# 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
Для таких вещей я полагаюсь на библиотеку chronic.
Код Ruby будет выглядеть следующим образом:
def date_of_next(day)
Chronic.parse("next #{day}")
end
Если вы используете рельсы, вы можете использовать Date.today.sunday
для воскресенья или Date.today.monday
для понедельника. И затем Date.today.sunday - 1.day
для субботы и т.д.
Для таких, как я, кто пришел сюда, ищет решение в Rails для этой проблемы, с Rails 5.2 существует гораздо более простой способ сделать это.
Для любого (например, оригинального плаката), не использующего Rails, эта функциональность доступна в самообслуживании ActiveSupport.
Чтобы найти следующий выходной день недели, мы можем просто написать что-то вроде Date.today.next_occurring(:friday)
.
Дополнительную информацию см. В документации.
Совместимое с Rails 4 решение:
(Date.today + 1.week).beginning_of_week(:monday)
где вы можете указать день, который вы хотите найти в качестве символьного аргумента; по умолчанию :monday
.
Обратите внимание, что это найдет следующее вхождение данного дня - если сегодня понедельник и вы ищете следующий понедельник, он вернет понедельник через неделю с сегодняшнего дня.
(источник: https://apidock.com/rails/Date/beginning_of_week/class)