0

def を実行する前に、どちらが先かを定義する必要があります。ファイルをかき集めて、次の週の日付を設定する必要がありますが、その日付は月曜日または水曜日のいずれかになります。これまでのところ取得しましたが、これでどの日付を使用するかを判断する方法がわかりません。最初に来る日付を使用する必要があります。

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

問題: 土曜日の場合、次の「月曜日」の日付を取得する必要があります。ただし、火曜日の場合は、「水曜日」の日付を取得する必要があります。タスクが完了すると、この情報を取得して毎日実行されます。

4

4 に答える 4

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

上記のメソッドは、1 日の日付を返します。複数の日の最初の日付を見つけるには、毎日呼び出して最初の日付を見つけます (日付を並べ替えることにより)。

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)>
于 2013-10-15T17:47:45.090 に答える
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

ここでは入力をグロビングして、1 つ以上の曜日名を検出できるようにしています。最初の行は、Date::DAYNAMES 配列内の曜日名のインデックスを見つけます。2 行目では、最初の day.wday (平日のインデックス) が探している曜日の 1 つと一致する場合に返される、最大 1 週間分の日付を処理します。

于 2013-10-15T17:58:40.000 に答える
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
于 2013-10-15T17:50:23.643 に答える
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      
于 2013-10-15T17:37:41.223 に答える