Args(年、月)で新しいオブジェクトDate.newを作成しました。 create Rubyデフォルトでこのオブジェクトに01の日数を追加しました。最初の日ではなく、argとして渡した月の最後の日を追加する方法はありますか(例:28 02monthまたは01monthの場合は31)?
_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
_
月の終わりを取得するには、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。
だから私はここで同じことをGoogleで探していました...
私は上記に満足していなかったので、 Ruby-DOC のドキュメントを読んだ後の私のソリューションは:
_10/31/2014
_を取得する例
Date.new(2014,10,1).next_month.prev_day
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")
これは別の検索方法です
これは私のTime
ベースのソリューションです。上記で提案されたDate
の解決策は何らかの形でよく読みましたが、Date
と比較して個人的な好みがあります。
reference_time ||= Time.now return (Time.new(reference_time.year, reference_time.month + 1) - 1).day