2

日付があり、たとえば最も近い木曜日を見つけたいと思っています。木曜日だけでなく、平日でも機能するようにしたいのですが。

混乱を避けるために、次の木曜日ではなく、前の木曜日か次の木曜日のどちらか近い方が必要です。したがって、双方向でなければなりません。

私はそれを行うコードを書きましたが、while ループには明らかに満足できず、より良い実装のアイデアがあるかどうか疑問に思っていました。

def closest_date(date, wday)

  # already ok
  return date if date.wday == wday

  before_date = date
  after_date = date

  until before_date.wday == wday && after_date.wday == wday
    before_date -= 1.day unless before_date.wday == wday
    after_date += 1.day unless after_date.wday == wday
  end

  if (date - before_date).to_i > (after_date - date).to_i
    return after_date
  else
    return before_date
  end

end
4

2 に答える 2