Calcular la edad de una persona con C#

Con la siguiente función podemos averiguar facilmente, la edad de una persona.

public int Edad(DateTime fechaNacimiento)
{
//Obtengo la diferencia en años.
int edad = DateTime.Now.Year - fechaNacimiento.Value.Year;

//Obtengo la fecha de cumpleaños de este año.
DateTime nacimientoAhora = fechaNacimiento.Value.AddYears(edad)
//Le resto un año si la fecha actual es anterior
//al día de nacimiento.
if (DateTime.Now.CompareTo(nacimientoAhora) > 0)
{
edad--;
}

return edad;
}

Espero les sea de utilidad.
Saludos!

13 comentarios:

Pablo Villazon dijo...

Gracias!, me sirvio el codigo.

Anónimo dijo...

No debiese ser
DateTime.Now.CompareTo(nacimientoAhora) < 0 ?

Milton Padilla dijo...

Excelente publicación Juani lo único que a como dijo anónimo debería de ser.
DateTime.Now.CompareTo(nacimientoAhora) < 0

Anónimo dijo...

Es una gran solucion, no se me hubiese ocurrido nunca, gracias :D

Nacho dijo...

TimeSpan a = DateTime.Today.Subtract(fechaNacimiento);
double b = a.Days / 365.25;
edad = Convert.ToInt32(b);

Anónimo dijo...

Gracias !

Mathita dijo...

muchas gracias encerio bueno yo asi saque dia mes y año espero les sirva Console.WriteLine("INGRESE EL DIA DE NACIMIENTO");
int dia = int.Parse(Console.ReadLine()); Console.WriteLine("INGRESE EL MES DE NACIMIENTO");
int mes = int.Parse(Console.ReadLine()); Console.WriteLine("INGRESE EL AÑO DE NACIMIENTO");
int anio = int.Parse(Console.ReadLine());
int a = DateTime.Now.Year - anio;
int m = DateTime.Now.Month - mes;
int d = DateTime.Now.Day - dia; Console.WriteLine("UD TIENE: " + a + " años, " + m + " meses, " + d + " días");

Anónimo dijo...

Gracias :)

Unknown dijo...

Yo quisiera saber como seria en windows form??

Anónimo dijo...

Asi trabaja bien en windows form lo unico que la edad si es 27 anos y tiene 27.5 anos lo cambia a 28 anos.


private void dtp_date_ValueChanged(object sender, EventArgs e)
{
int Age; //esta sera la edad

TimeSpan Diff = DateTime.Today.Subtract(dtp_date.Value);
Age = Convert.ToInt32(Diff.TotalDays / 365.25);
var Ages = Diff.TotalDays / 365.25;

txt_edad.Text = Convert.ToString(Diff.TotalDays / 365.25); aqui esta el txtbox con nombre txt_edad
tbx_age.Text = Age.ToString(); // aqui esta el txtbox con nombre tbx_age
}

Dalvin Sierra dijo...

Me fue de mas utilidad el código de anónimo, de todas formas gracias a todos.!

Unknown dijo...

con esta función toma en cuenta el mes y dias

public int edad(DateTime fch_naciminto)
{
int year = DateTime.Now.Year - fch_naciminto.Year;
int month = DateTime.Now.Month - fch_naciminto.Month;
int day = DateTime.Now.Day - fch_naciminto.Day;
if(month < 0) {
return year - 1;
} else if(month == 0) {
if(day <= 0) {
return year;
} else {
return year - 1;
}
} else {
return year;
}
}

Unknown dijo...

Hola Buenas tardes, mi nombre es Carlos Parra desde Medellìn Colombia. El primer ejemplo funciona correctamente pero haciendo una modificación de la siguiente forma:

if (DateTime.Now.CompareTo(nacimientoAhora) > 0)

esta linea debe cambiar el signo > por <

esto sería todo.

Saludos!!!