web-dev-qa-db-ja.com

Rubyで月の最終日を取得

Args(年、月)で新しいオブジェクトDate.newを作成しました。 create Rubyデフォルトでこのオブジェクトに01の日数を追加しました。最初の日ではなく、argとして渡した月の最後の日を追加する方法はありますか(例:28 02monthまたは01monthの場合は31)?

49
sanny Sin

_Date.civil_を使用します

Date.civil(y, m, d)またはそのエイリアス.new(y, m, d)を使用すると、新しいDateオブジェクトを作成できます。日(d)と月(m)の値は負の場合があり、その場合はそれぞれ年末と月末から逆算します。

_=> Date.civil(2010, 02, -1)
=> Sun, 28 Feb 2010
>> Date.civil(2010, -1, -5)
=> Mon, 27 Dec 2010
_
92
Mp de la Vega

月の終わりを取得するには、ActiveSupportのヘルパーend_of_month

# Require extensions explicitly if you are not in a Rails environment
require 'active_support/core_ext' 

p Time.now.utc.end_of_month # => 2013-01-31 23:59:59 UTC
p Date.today.end_of_month   # => Thu, 31 Jan 2013

end_of_month の詳細については、Rails API Docs。

62
Thomas Klemm

だから私はここで同じことをGoogleで探していました...

私は上記に満足していなかったので、 Ruby-DOC のドキュメントを読んだ後の私のソリューションは:

_10/31/2014_を取得する例

Date.new(2014,10,1).next_month.prev_day

14
Jumpers
require "date"
def find_last_day_of_month(_date)
 if(_date.instance_of? String)
   @end_of_the_month = Date.parse(_date.next_month.strftime("%Y-%m-01")) - 1
 else if(_date.instance_of? Date)
   @end_of_the_month = _date.next_month.strftime("%Y-%m-01") - 1
 end
 return @end_of_the_month
end

find_last_day_of_month("2018-01-01")

これは別の検索方法です

0
Ali Akbar

これは私のTimeベースのソリューションです。上記で提案されたDateの解決策は何らかの形でよく読みましたが、Dateと比較して個人的な好みがあります。

reference_time ||= Time.now return (Time.new(reference_time.year, reference_time.month + 1) - 1).day

0
akostadinov