私はRubyを初めて使っており、毎月最終金曜日の日を取得したいと考えています。 たとえば、3月の最後の金曜日は29日、4月26日の最後の金曜日です。 どうすれば解決策を得ることができますか? 私はレールフレームワークを使用しています。毎月最後の金曜日の日を取得します
メソッド.cweek
は、今週の週を返しますが、現在の月の週は返しません。
私はRubyを初めて使っており、毎月最終金曜日の日を取得したいと考えています。 たとえば、3月の最後の金曜日は29日、4月26日の最後の金曜日です。 どうすれば解決策を得ることができますか? 私はレールフレームワークを使用しています。毎月最後の金曜日の日を取得します
メソッド.cweek
は、今週の週を返しますが、現在の月の週は返しません。
私は李氏の答えとなるだろう、それはかなりクールだ(私は思った)ので、私はこれだけを投稿しています。月の最終金曜日を取得
#Last Friday of this coming December
require 'chronic'
last_friday = Chronic.parse("First Friday of next January") - 1.week
かなりクールな宝石! – Leoh
あなたは私もChronic(私はそれを維持している)を提案する最初のだろうと思うだろう、それは間違いなくその場所を持っています。私はそれがここにあるとは思っていませんが、確かにオプションのないものです。 –
は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
あなたはこのようにそれを使用することがあります。
宝石Chronic
(
https://github.com/mojombo/chronic)を使用して
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)>]
こんにちは@tessi、 '.find(&friday?)'フラグメントが何をしているのか説明してもらえますか?私はそれに関する関連文書を見つけることができないようです。 – vincentleest
@vincentleest。 'Date.new(年、月、-1).downto(0)'はあなたに日付の配列を与えます。 find-partは 'date_array.find {| d | d.friday?} '。 'date.friday?'が 'true'を返す最初の日付を返します。 – tessi
@sawa私は彼の例が今年を参照していると思います... – aromero