Подтвердить что ты не робот

Получить последний день месяца в Ruby

Я создал новый объект Date.new с args (год, месяц). После создания ruby ​​добавлено 01 дня к этому объекту по умолчанию. Есть ли способ добавить не первый день, а последний день месяца, который я передал как arg (например, 28, если это будет 02 месяцев или 31, если это будет 01 месяц)?

4b9b3361

Ответ 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")

Это еще один способ найти