57 votes

Comment obtenir le nombre de jours d'un mois donné en Ruby, en tenant compte de l'année?

Je suis sûr qu’il existe une ligne simple et élégante dans Ruby qui vous indique le nombre de jours d’un mois donné, par année, comme "février 1997". Qu'Est-ce que c'est?

133voto

mkosma Points 441

Si vous travaillez dans les Rails, les chances sont que vous aurez paralysées finalement, si vous basculez entre les Time, Date, et DateTime, surtout quand il s'agit de traiter avec UTC/les fuseaux horaires, heure d'été, et la comme. D'après mon expérience, il est préférable d'utiliser Time, et le bâton avec elle partout.

Donc, en supposant que vous êtes à l'aide de Rails est Temps de classe, il y a deux bonnes options, selon le contexte:

  1. Si vous avez un mois m et l'année y, utiliser la méthode de la classe sur Time:

    days = Time.days_in_month(m, y)
    
  2. Si vous avez un objet de Temps t, nettoyeur de demander le numéro du jour de la dernière journée du mois:

    days = t.end_of_month.day
    

68voto

crantok Points 184

Je ne connais pas encore Ruby, alors je ne sais pas si cette fonctionnalité était disponible lorsque Mike Wade a répondu. (Aurait commenté sa réponse mais ne pense pas que j'ai assez de représentant pour le faire.)

 require 'date'

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

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

26voto

andre-r Points 1858

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
 

5voto

Henley Chiu Points 2928

Utilisez Time.days_in_month(month)month = 1 pour janvier, 2 pour février, etc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X