Я создал новый объект Date.new с args (год, месяц). После создания ruby добавлено 01 дня к этому объекту по умолчанию. Есть ли способ добавить не первый день, а последний день месяца, который я передал как arg (например, 28, если это будет 02 месяцев или 31, если это будет 01 месяц)?
Получить последний день месяца в Ruby
Ответ 1
использовать 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
Ответ 2
Чтобы получить конец месяца, вы также можете использовать помощник 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 в Документах API Rails.
Ответ 3
Итак, я искал в Google то же самое здесь...
Я был недоволен выше, поэтому мое решение после чтения документации в RUBY-DOC:
Пример получения 10/31/2014
Date.new(2014,10,1).next_month.prev_day
Ответ 4
Это мое решение на основе Time
. У меня есть личное предпочтение этому по сравнению с Date
хотя предложенные выше предложения Date
как-то лучше.
reference_time ||= Time.now return (Time.new(reference_time.year, reference_time.month + 1) - 1).day
Ответ 5
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")
Это еще один способ найти