

現在このようなコードにしています。

`Date.new(Time.now.year, Time.now.month, -1).day`

もっとスマートに書けるんじゃないかと思うんですが、、、、

他に書き方があれば教えて下さい。

もっと言うと、「今日は末日かどうか」の判定を行うために使っています。  
これに適した方法があればそちらも教えてくださると嬉しいです。


CC BY-SA 3.0
2016-03-15T14:35:42.423
23169
2016-03-15T20:52:23.307
9149
question
ruby
Rubyで今月の末日を取得する方法について


ActiveSupport の `Date#at_end_of_month` (時刻なら `Time#at_end_of_month`)
を利用する方法があります。(標準でスマートに書く方法は無いはず。)

[code]

    require "active_support/all"
    
    Date.today.at_end_of_month
    # => Thu, 31 Mar 2016
    
[/code]


CC BY-SA 3.0
2016-03-15T15:19:53.530
23171
2016-03-15T15:19:53.530
76
23169
answer


これはRubyなので、他に書き方があるはずですが`Date.new(Time.now.year, Time.now.month,
-1).day`の書き方は結構読みやすいし、とても[人気のある](https://stackoverflow.com/a/14120721/1167750)書き方です。[別のアップローチ](https://stackoverflow.com/a/16913606/1167750)もあるようですが、この場合の関数は元のアップローチより読みやすくないと私は思います。

また、Rails自体を使う場合は、[`end_of_month()`](http://apidock.com/rails/DateAndTime/Calculations/end_of_month)という関数もあると思います。

[yasuさんが説明した](https://ja.stackoverflow.com/a/23171/4129)ように、[ActiveSupport](https://rubygems.org/gems/activesupport)のオプションもあります。そういえば、[`expanded_date`](https://rubygems.org/gems/expanded_date)というgemもあるようです。

`expanded_date`の例 ([Jonさんのスレに基づいた例](https://www.ruby-
forum.com/topic/95475#197276))：

[code]

    require 'expanded_date'
    
    d = Date.today
    puts d.end_of_month.mday.to_s
    
[/code]

出力は：

[code]

    31
    
[/code]


CC BY-SA 3.0
2016-03-15T15:20:31.000
23172
2016-03-15T20:52:23.307
2017-05-23T12:38:56.083
-1
4129
23169
answer