Je suis sûr qu’il existe une ligne simple et élégante en Ruby qui vous donne le nombre de jours d’un mois donné, par année, comme "février 1997". Qu'Est-ce que c'est?
Voici l'implémentation de ActiveSupport (un peu adapté):
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
Si vous travaillez dans Rails, il est fort probable que vous finissiez par être bloqué si vous passez de Time
, Date
et DateTime
, en particulier en ce qui concerne le traitement des fuseaux horaires, des fuseaux horaires, de l'heure d'été, etc. Selon mon expérience, il est préférable d’utiliser Time
et de l’utiliser partout.
Donc, si vous utilisez la classe Time de Rails, il existe deux bonnes options, selon le contexte:
Si vous avez un mois m
et une année y
, utilisez la méthode de classe sur Time
:
days = Time.days_in_month(m, y)
Si vous avez un objet Time t
, nettoyeur pour demander le numéro du jour du dernier jour du mois:
days = t.end_of_month.day
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)
Que diriez-vous:
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)
Vous pouvez également vouloir regarder Time :: days_in_month dans Ruby on Rails.
Projet Rails pour la date du jour
Time.days_in_month(Time.now.month, Time.now.year)
Pour toute date t qui est une instance de Time
Time.days_in_month(t.month, t.year)
ou
t.end_of_month.day
.
Si vous avez UTC secondes , vous devez d'abord obtenir une instance de Time.
Time.at(seconds).end_of_month.day
réviser l'entrée pour un autre format
def days_in_a_month(date = "2012-02-01")
date.to_date.end_of_month.day
end
Utilisez Time.days_in_month(month)
où month = 1
pour janvier, 2
pour février, etc.
Time.now.end_of_month.day
- pour le mois en cours
Date.parse("2014-07-01").end_of_month.day
- utilise la date du premier jour du mois.
Dépend d'ActiveSupport
à partir de Rails 3.2 ... il existe une version intégrée: http://api.rubyonrails.org/classes/Time.html#method-c-days_in_month
(hélas, il apparaît après cette réponse, ce qui oblige les gens à faire une longue randonnée)
Un moyen simple en utilisant Date
:
def days_of_month(month, year)
Date.new(year, month, -1).day
end
Pour un objet Date donné, je pense que le plus simple est:
Date.today.all_month.count
Comme l’heure n’est pas pertinente à cette fin, vous avez simplement besoin d’un objet de date:
[*Date.today.all_month].size
Je pense que c'est le moyen le plus simple de l'obtenir
def get_number_of_days(date = Date.today)
Date.new(date.year, date.month, -1).mday
end