2016-03-31 59 views
0

水曜日に少なくとも14日間離れているように日付を設定したいと思います。つまり、日付が3/14/16の場合、3/30/16に設定されます。 3/10の場合は3/30となります。ルビーを探しています。日時と曜日に基づいて日付を設定しますか?

だから私の考えは、このようなものです:

def next_weds 
    self + (14 + closest_wed_day) 
end 

問題は、私が最も近い水曜日を取得し、その日に14を追加するにはどうすればよい、weddayの意味を定義する方法です。だから、もし今日が火曜日なら15を足します。木曜日なら20を追加します。

+0

試してみましたか?私たちはあなたのコードをデバッグするのを助けてくれるでしょうが、私たちはあなたのためにそれを書くのではありません... –

+0

ちょうど私が持っているものを加えました – user3335830

答えて

0

これは純粋なRubyソリューションです。

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