2016-03-31 38 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

這是一個純粹的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 
相關問題