Рубиновый код для получения даты следующего понедельника (или любого дня недели) - PullRequest
34 голосов
/ 28 октября 2011

При условии ввода, например,

day = 'Monday'

как мне вычислить дату day?

def date_of_next(day)
  ...
end

Ответы [ 6 ]

90 голосов
/ 28 октября 2011
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)>
21 голосов
/ 25 февраля 2015

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

# 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
14 голосов
/ 06 мая 2018

Для тех, кто, как я, приехал сюда и ищет решение этой проблемы в Rails, в Rails 5.2 существует гораздо более простой способ сделать это.

Для всех (как, например, оригинальный постер), не специальноиспользуя Rails, эта функциональность доступна в ActiveSupport gem.

Чтобы найти следующий день недели, мы можем просто написать что-то вроде Date.today.next_occurring(:friday).

Подробнее см. в документации .

13 голосов
/ 28 октября 2011

Для подобных вещей я использую библиотеку ronic .

Код Ruby будет:

def date_of_next(day)
    Chronic.parse("next #{day}")
end
12 голосов
/ 21 мая 2015

Если вы используете рельсы, вы можете использовать Date.today.sunday для воскресенья или Date.today.monday для понедельника.А потом Date.today.sunday - 1.day на субботу и т. Д.

1 голос
/ 15 декабря 2018

A-совместимое с Rails 4 решение:

(Date.today + 1.week).beginning_of_week(:monday)

, где вы можете указать день, который вы хотите найти в качестве символьного аргумента;по умолчанию это :monday.

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

(источник: https://apidock.com/rails/Date/beginning_of_week/class)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...