2016-03-31 4 views
0

Я хотел бы установить дату, по крайней мере, 14 дней в среду. Значение, если дата 3/14/16, установила бы ее 3/30/16. Если это 3/10, это будет 3/30. Глядя на рубин.Установка даты на основе дней и дня недели?

Так что моя мысль что-то вроде этого:

def next_weds 
    self + (14 + closest_wed_day) 
end 

Вопрос заключается в том, как определить wedday смысл, как я могу получить ближе среду, а затем добавить 14 к этой дате. Так что если сегодня вторник будет добавлено 15. Если в четверг он добавит 20.

+0

Что вы пробовали? Мы будем рады помочь вам отладить ваш код, но мы здесь не для того, чтобы написать его для вас ... –

+0

Только что добавил, что у меня есть – user3335830

ответ

0

Это чисто-рубиновое решение.

require 'date' 

def first_day_of_week(min_days_from_now, day_of_week) 
    today = Date.today 
    days_until_day_of_week = (7 + day_of_week - today.wday) % 7 
    today + days_until_day_of_week + 
    7*(([min_days_from_now-days_until_day_of_week, 0].max/7.0).ceil) 
end 

Сегодня:

today = Date.today 
    #=> #<Date: 2016-03-31 ((2457479j,0s,0n),+0s,2299161j)> 
wday = today.wday 
    #=> 4 
Date::DAYNAMES[wday] 
    #=> "Thursday" 

Пусть:

day_of_week = 3 
Date::DAYNAMES[day_of_week] 
    #=> "Wednesday" 

Тогда:

puts "  # min_days_from_now date  wday" 
(0..14).each do |min_days_from_now| 
    fd = first_day_of_week(min_days_from_now, day_of_week) 
    puts "  #  %2d  %s %d" % [min_days_from_now, fd.to_s, fd.wday] 
end 
    # min_days_from_now date  wday 
    #   0  2016-04-06 3 
    #   1  2016-04-06 3 
    #   2  2016-04-06 3 
    #   3  2016-04-06 3 
    #   4  2016-04-06 3 
    #   5  2016-04-06 3 
    #   6  2016-04-06 3 
    #   7  2016-04-13 3 
    #   8  2016-04-13 3 
    #   9  2016-04-13 3 
    #  10  2016-04-13 3 
    #  11  2016-04-13 3 
    #  12  2016-04-13 3 
    #  13  2016-04-13 3 
    #  14  2016-04-20 3 
Смежные вопросы