web-dev-qa-db-fra.com

Comment calculer un âge basé sur un anniversaire?

Duplicata possible:
Comment calculer l'âge d'une personne en C #?

Je veux écrire une méthode d'assistance ASP.NET qui renvoie l'âge d'une personne à son anniversaire.

J'ai essayé du code comme celui-ci:

public static string Age(this HtmlHelper helper, DateTime birthday)
{
    return (DateTime.Now - birthday); //??
}

Mais ça ne marche pas. Quelle est la bonne façon de calculer l'âge de la personne en fonction de son anniversaire?

21
ignaciofuentes

Stackoverflow utilise une telle fonction pour déterminer l'âge d'un utilisateur.

Calculer l'âge en C #

La réponse donnée est

DateTime now = DateTime.Today;
int age = now.Year - bday.Year;
if (now < bday.AddYears(age)) age--;

Donc, votre méthode d'aide ressemblerait à

public static string Age(this HtmlHelper helper, DateTime birthday)
{
    DateTime now = DateTime.Today;
    int age = now.Year - birthday.Year;
    if (now < birthday.AddYears(age)) age--;

    return age.ToString();
}

Aujourd'hui, j'utilise une version différente de cette fonction pour inclure une date de référence. Cela me permet d'obtenir l'âge de quelqu'un à une date future ou dans le passé. Ceci est utilisé pour notre système de réservation, où l'âge dans le futur est nécessaire.

public static int GetAge(DateTime reference, DateTime birthday)
{
    int age = reference.Year - birthday.Year;
    if (reference < birthday.AddYears(age)) age--;

    return age;
}
43

Un autre moyen intelligent de cela ancien fil :

int age = (
    Int32.Parse(DateTime.Today.ToString("yyyyMMdd")) - 
    Int32.Parse(birthday.ToString("yyyyMMdd"))) / 10000;
6
Rubens Farias

Je le fais comme ça:

(Raccourci un peu le code)

public struct Age
{
    public readonly int Years;
    public readonly int Months;
    public readonly int Days;

}

public Age( int y, int m, int d ) : this()
{
    Years = y;
    Months = m;
    Days = d;
}

public static Age CalculateAge ( DateTime birthDate, DateTime anotherDate )
{
    if( startDate.Date > endDate.Date )
        {
            throw new ArgumentException ("startDate cannot be higher then endDate", "startDate");
        }

        int years = endDate.Year - startDate.Year;
        int months = 0;
        int days = 0;

        // Check if the last year, was a full year.
        if( endDate < startDate.AddYears (years) && years != 0 )
        {
            years--;
        }

        // Calculate the number of months.
        startDate = startDate.AddYears (years);

        if( startDate.Year == endDate.Year )
        {
            months = endDate.Month - startDate.Month;
        }
        else
        {
            months = ( 12 - startDate.Month ) + endDate.Month;
        }

        // Check if last month was a complete month.
        if( endDate < startDate.AddMonths (months) && months != 0 )
        {
            months--;
        }

        // Calculate the number of days.
        startDate = startDate.AddMonths (months);

        days = ( endDate - startDate ).Days;

        return new Age (years, months, days);
}

// Implement Equals, GetHashCode, etc... as well
// Overload equality and other operators, etc...

}

2
Frederik Gheysels