Я уверен, что в Ruby есть простой простой элегантный лайнер, чтобы дать вам количество дней в данном месяце, составляющих год, например "Февраль 1997". Что это?
Как получить количество дней в данном месяце в Ruby за год?
Ответ 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
Ответ 8
по рельсам 3.2... есть встроенная версия: http://api.rubyonrails.org/classes/Time.html#method-c-days_in_month
(увы, он появляется после этого ответа, который принимает людей на длинный поход)
Ответ 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