2013-10-15 139 views
0

我需要定義在運行def之前哪個先來。我必須耙一個文件並設置下一週的日期,但該日期可能是星期一或星期三。到目前爲止,我已經得到它,但不知道如何判斷在這個日期使用哪個日期。我需要先使用任何日期。找到下個星期的第一個日期 - Ruby on Rails

require 'date' 

def date_of_next(day1, day2) 
    day = day1 
    date = Date.parse(day) 
    delta = date >= Date.today ? 0 : 7 
    date + delta 
end 

hello = date_of_next("Monday", "Wednesday") 
puts hello 

問題:如果我在星期六,我需要得到即將到來的「星期一」的日期。但是,如果我在星期二,我需要得到「星期三」的日期。當我完成任務時,它會每天獲得這些信息。

+0

即使這個問題已經回答,爲了未來讀者的利益,我認爲這個問題需要澄清。我的理解是:星期天開始。 「day1」之前的星期幾(例如,「day1」=「星期一」,第2天=「星期三」)。如果今天的日期不晚於'day1'的日期,則返回'day1'的日期。如果今天的日期不晚於'day2'的日期,否則返回'day2'的日期。否則,請在下一週返回'day1'的日期。正確? –

回答

1

你的代碼是基於https://stackoverflow.com/a/7930553/477037

def date_of_next(day) 
    date = Date.parse(day) 
    delta = date > Date.today ? 0 : 7 
    date + delta 
end 

上述方法返回單日的日期。爲了找到多天第一次約會,把它的每一天,找到的第一個(由排序日期):

def first_date_of_next(*days) 
    days.map { |day| date_of_next(day) }.sort.first 
end 

first_date_of_next("Monday", "Wednesday") 
#=> #<Date: 2013-10-16 ((2456582j,0s,0n),+0s,2299161j)> 
+0

這是完美的工作,是的,那就是代碼的來源。非常感謝這個。 – nathanielelliott

0

這是否符合您的要求?

require 'Date' 
def date_of_next(early_dow, late_dow) 
    early_date = Date.parse(early_dow) 
    late_date = Date.parse(late_dow) 
    today = Date.today 
    if today <= early_date 
    early_date 
    elsif today <= late_date 
    late_date 
    else 
    early_date + 7 
    end 
end  
+0

但是,如何定義它可能是「星期一」還是「星期三」? – nathanielelliott

+0

只需調用'date_of_next('Monday')'或'date_of_next('Monday')'。 –

+0

但我需要弄清楚哪一天首先與我所在的日子有關。它可能是星期一,但也可能是星期三。如果它是動態的,我該如何傳遞該變量? – nathanielelliott

0
require 'date' 

def date_of_next(d) 
    Date.today.step(Date.today + 7).select{ |i| puts i if i.strftime("%A") == "#{d}" && i > Date.today} 
end 
0

這個怎麼樣?

require 'Date' 

def date_of_next(*day_names) 
    weekdays = day_names.map{|dayname| Date::DAYNAMES.index(day_name) } 
    Range.new(Date.today, Date.today+6).detect{|day| weekdays.include? day.wday } 
end 

在這裏,我們通過輸入法來檢測一個或多個工作日名稱。第一行查找Date :: DAYNAMES數組中的星期幾的名稱的索引。在第二行中,當第一天(週日指數)與我們正在尋找的某個工作日相匹配時,我們會處理一週的價值。

相關問題