Les réponses sont pour l'instant assez bizarres. Votre première tentative était assez proche de la bonne façon de procéder :
birthday = DateTime.new(1900, 1, 1)
age = (DateTime.now - birthday) / 365.25 # or (1.year / 1.day)
Vous obtiendrez un résultat fractionnaire, alors n'hésitez pas à convertir le résultat en un entier avec to_i
. Cette solution est meilleure car elle traite correctement la différence de date comme une période de temps mesurée en jours (ou en secondes dans le cas de la classe Time associée) depuis l'événement. Une simple division par le nombre de jours d'une année permet alors d'obtenir l'âge. Lorsque l'on calcule l'âge en années de cette manière, tant que l'on conserve la valeur originale de la date de naissance, il n'est pas nécessaire de tenir compte des années bissextiles.
7 votes
J'aime cette question parce qu'elle met en évidence l'idée qu'il y a des façons de faire " plus Ruby " et " moins Ruby ". Il est important non seulement d'être logiquement correct (ce que vous pourriez être en copiant la réponse C#), mais aussi stylistiquement correct. Et la réponse d'Adinochestva utilise bien l'idiome Ruby.