9

私はルビーが初めてで、毎月最終金曜日の日を取得したいと考えています。たとえば、3 月の最終金曜日は 29 日で、4 月 26 日の最終金曜日です。Railsフレームワークを使用しています。

このメソッド.cweekはその年の週を返しますが、現在の月の週は返しません。

4

4 に答える 4

10
#!/usr/bin/env ruby

require 'date'

(1..12).each do |month|
  d = Date.new(2013, month, -1)
  d -= (d.wday - 5) % 7
  puts d
end

ソース(2 番目/3 番目の Google の結果..)

于 2013-03-04T19:06:25.207 に答える
4

私はリーの答えに行きます、私はこれを投稿するだけです。なぜなら(私は)それがかなりクールだからです。

gemの使用Chronichttps://github.com/mojombo/chronic):

#Last Friday of this coming December
require 'chronic'
last_friday = Chronic.parse("First Friday of next January") - 1.week
于 2013-03-04T19:20:39.787 に答える
2

月の最後の金曜日の取得は、1 行で行うことができます。

def last_fridays_for_every_month_of_year(year)
  (1..12).map do |month|
    Date.new(year, month, -1).downto(0).find(&:friday?)
  end
end

次のように使用できます。

last_fridays_for_every_month_of_year 2013
#=> [#<Date: 2013-01-25 ((2456318j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-02-22 ((2456346j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-03-29 ((2456381j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-04-26 ((2456409j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-05-31 ((2456444j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-06-28 ((2456472j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-07-26 ((2456500j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-08-30 ((2456535j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-09-27 ((2456563j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-10-25 ((2456591j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-11-29 ((2456626j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-12-27 ((2456654j,0s,0n),+0s,2299161j)>]
于 2013-07-31T19:15:23.093 に答える
1
require "active_support/core_ext"

end_of_month = Date.today.end_of_month
if end_of_month - end_of_month.beginning_of_week >= 4
   end_of_month+5.days
else
   end_of_month-2.days
end
# => Fri, 29 Mar 2013
于 2013-03-04T19:11:33.980 に答える