Как получить количество дней в данном месяце в Ruby за год?

Я уверен, что в Ruby есть простой простой элегантный лайнер, чтобы дать вам количество дней в данном месяце, составляющих год, например "Февраль 1997". Что это?

Ответ 1

Это реализация ActiveSupport (немного адаптированная):

COMMON_YEAR_DAYS_IN_MONTH = [nil, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

def days_in_month(month, year = Time.now.year)
   return 29 if month == 2 && Date.gregorian_leap?(year)
   COMMON_YEAR_DAYS_IN_MONTH[month]
end

Ответ 2

Если вы работаете в Rails, скорее всего, вы столкнетесь в конечном итоге, если переключитесь на Time, Date и DateTime, особенно когда дело касается UTC/часовых поясов, летнего времени, и тому подобное. Мой опыт был лучше всего использовать Time и придерживаться его повсюду.

Итак, если вы используете Rails Time class, есть два хороших варианта, в зависимости от контекста:

  • Если у вас есть месяц m и год y, используйте метод класса Time:

    days = Time.days_in_month(m, y)
    
  • Если у вас есть объект времени t, очиститель запросит номер дня последнего дня месяца:

    days = t.end_of_month.day
    

Ответ 3

require 'date'

def days_in_month(year, month)
  Date.new(year, month, -1).day
end

# print number of days in February 2012
puts days_in_month(2012, 2)

Ответ 4

Как насчет:

require 'date'

def days_in_month(year, month)
  (Date.new(year, 12, 31) << (12-month)).day
end

# print number of days in Feburary 2009
puts days_in_month(2009, 2)

Вы также можете посмотреть Time:: days_in_month в Ruby on Rails.

Ответ 5

В проекте Rails для текущей даты

Time.days_in_month(Time.now.month, Time.now.year)

Для любой даты t, которая является экземпляром Time

Time.days_in_month(t.month, t.year)

или

t.end_of_month.day

.
Если у вас UTC секунды, вам нужно получить экземпляр Time first

Time.at(seconds).end_of_month.day

Ответ 6

Используйте Time.days_in_month(month) где month = 1 для января, 2 для февраля и т.д.

Ответ 7

изменить вход для другого формата

def days_in_a_month(date = "2012-02-01")
  date.to_date.end_of_month.day
end

Ответ 9

Time.now.end_of_month.day - для текущего месяца

Date.parse("2014-07-01").end_of_month.day - использовать дату первого дня в месяце.

Зависит от ActiveSupport

Ответ 10

Я думаю, что это самый простой способ получить его

def get_number_of_days(date = Date.today)
  Date.new(date.year, date.month, -1).mday
end

Ответ 11

Простой способ использования Date:

def days_of_month(month, year)
  Date.new(year, month, -1).day
end