1

一連の日付を動的に生成する方法を理解しようとしています。休日を考慮する必要があります。日付の配列がありますが、日付配列の各メンバーについて、休日の配列と比較し、必要に応じて日付を移動したいと考えています。

休日があるときはいつでも、その休日の前の日付を選択したいのですが、複数の日付の休日がある場合 (たとえば、木曜日と金曜日の休日、または 3 日間または 4 日間の休日) を考慮する必要があります。

これが私の作業コードです。これは現在、私がやりたいことを行うことができません。私が間違っていることは何か分かりますか?

dates = [array of dates]
holidays = [array of holidays]

dates.each do |date|
  adjust_for_holidays(date)
end

def adjust_for_holidays
  n = 0      
  while holidays.include? date  
    n += 1
    date = date - (n-1)
  end
 date
4

2 に答える 2

1

まず、メソッドに適切な数の引数がありません。また、日付はインスタンス変数でなければなりません。キーが日付で、値がその休日の日数である休日のハッシュをお勧めします。たとえば、大統領の日と労働者の日

{'2/18' => 1,
 '9/2'  => 1
} 

日付が含まれている場合は、値を先に進めます。このようなもの

def adjust_for_holidays(dates)
  holidays.each do |date, value|
    @date += value if @date.include?(date)
  end
end

そんな感じ。ただし、特定の日数を文字列の日付に追加する方法がわかりません。あなたにそれを理解させてください:)。

于 2013-02-19T19:16:15.647 に答える
1

これがあなたが望むものだと思います:

require 'date'

dates = []
(1..28).each do |i|
  dates << Date.new(2012, 02, i) 
end

@holidays = [Date.new(2012, 02, 17), Date.new(2012, 02, 18)]
puts "HOLIDAYS: " + @holidays.inspect

def adjust_for_holidays(date)
  while @holidays.include? date  
    date = date - 1
  end
 date
end

d = dates.collect do |date|
  adjust_for_holidays(date)
end

date = date - (n-1) を設定していて、n が増加し続けることに注意してください。

于 2013-02-19T19:27:14.030 に答える