2013-10-15 5 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'= 'Monday', day2 = 'Wednesday'). 오늘 날짜가'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

"Monday"또는 "Wednesday"중 하나 일 수 있다고 어떻게 정의합니까? – 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 

여기서 입력을 globbing하여 하나 이상의 요일 이름을 검색 할 수 있습니다. 첫 번째 줄은 Date :: DAYNAMES 배열에서 요일 이름의 인덱스를 찾습니다. 두 번째 줄에서는 첫 번째 요일 (평일 지표)이 우리가 찾고있는 평일 중 하나와 일치 할 때 최대 일주일의 가치가 반환됩니다.