やりたいこと
2014年に存在する金曜日と土曜日の日数を数えたい。
方法
rails consoleでこんなふうにコードを打ち込みます。
cd (Railsアプリがあるディレクトリ)
rails c
Loading development environment (Rails 4.2.0)
irb(main):001:0> '2014-01-01'.to_date.all_year.count{|d| d.friday? or d.saturday? }
=> 104
どうやら2014年の金曜日と土曜日は 104日 あるみたいです!
コードの解説
String#to_date
とDate#all_year
はRailsで提供されている便利メソッドです。
to_date
は文字列をDate型に変換し、all_year
はその年の1月1日から12月31日までのRangeを返します。
irb(main):018:0> date = '2014-01-01'.to_date
=> Wed, 01 Jan 2014
irb(main):019:0> range = date.all_year
=> Wed, 01 Jan 2014..Wed, 31 Dec 2014
Enumerable#count
はその名の通り、コレクションの中から特定の条件に合致するオブジェクトの個数を数えるRubyの標準メソッドです。
また、Date#friday?
とDate#saturday?
もその名の通り、金曜日、もしくは土曜日であればtrue
を返すRubyの標準メソッドです。
つまり、以下のコードは1年間の日付の中で、金曜日、または土曜日に合致する日付の個数を数えるコードになります。
irb(main):021:0> range.count{|d| d.friday? or d.saturday? }
=> 104
上記のコードをひとまとめに書くと最初に示したコードができあがります。
irb(main):001:0> '2014-01-01'.to_date.all_year.count{|d| d.friday? or d.saturday? }
=> 104
まとめ
RubyとRailsのメソッドって本当に便利!!
日常的なちょっとした疑問にも簡単に答えが出せますね~。
あわせて読みたい
以下の記事では日付や日時の扱いの注意事項をまとめています。
おまけ:なんで金曜日と土曜日の日数を数えてるの?
なぜ金曜日と土曜日の日数を数えようと思ったのか?
それは僕の妻がやっているパン屋さんの営業日が金曜日と土曜日だからです・・・。
ちょっと所用で営業日の日数を数える必要があったのでこんなコードを書いていたのでした。