29444


特定の日付から過去10年分の同一日を取得したいのですが、  
指定する日付が月末であった場合は月末に変更したいです。

このように書いたのですが、もう少し良い書き方はありますか？

[code]

      def same_dates_in_past(date)
        #date = Date.new(2017,2,28)
        end_of_month = date == date.end_of_month
        dates = 10.times.map{|i| date - i.years}
        dates.map!(&:end_of_month) if end_of_month
        dates
      end
    
[/code]

もう少し短く簡潔に書けるかと思ったのですが、うまく書けませんでした。


CC BY-SA 3.0
2016-10-08T09:50:25.117
29429
2016-10-09T15:14:08.390
3271
question
ruby-on-rails ruby
過去の同一日を取得する際に月末を考慮に入れる方法


質問のコードで十分短かいですし、分かり易い物を使うのが一番だと思いますが、`send`メソッドを使用して、呼ぶメソッドを動的に決定する例です。

[code]

    def same_dates_in_past(date)
        m = (date == date.end_of_month) ? :end_of_month : :itself
        10.times.map{|i| (date - i.years).send(m)}
    end
    
[/code]

月末日の場合「1日足して、1年引いて、1日引く」例。  
rails非依存。月末日に1日足すとn月1日になり、n月1日から1日引くと月末日になる事を利用。

[code]

    def same_dates_in_past(date)
        p = (date + 1).day == 1 ? 1 : 0
        10.times.map{|i| (date + p).prev_year(i) - p}
    end
    
[/code]


CC BY-SA 3.0
2016-10-09T15:14:08.390
29444
2016-10-09T15:14:08.390
3054
29429
answer