> Manuales > Taller de Javascript

Cómo calcular la edad con Javascript, a partir de una cadena con una fecha en formato español. Explicaremos cómo tratar el string con la fecha de nacimiento y cómo calcular los años que tendría la persona ayudados mediante la clase Date.

Calcular la edad en Javascript

En este artículo vamos a explicar una función que calcula la edad de una persona. Para ello recibe un string con la fecha de nacimiento de la persona y devuelve el número de años que tiene. Estamos ante un ejercicio que ilustra muy bien el trabajo con fechas en Javascript.

Referencia: Para aprender algo que nos sirva de base en el cálculo de fechas sería interesante leer el artículo Clase Date en Javascript.

Explicación del algoritmo para calcular la edad a través de una fecha

En este artículo vamos a recibir una fecha en formato español: algo como "12/10/1975". El dato por tanto que vamos a usar como entrada es de tipo string.

Lo primero que tendremos que hacer separar los distintos valores de año, mes, día. Para ello utilizamos el método split(), que pertenece a la clase String (tipo de la fecha que vamos a recibir). El método split() invocado sobre un string devuelve un array con el valor de cada una de las partes de la cadena, utilizando el carácter separador que nosotros necesitemos, en este caso el carácter "/". Después de la separación, en el array devuelto, deberíamos tener tres casillas, donde la primera (la de índice 0) guardará el día, la segunda el mes y la tercera el año.

Referencia: Los métodos de la clase String se pueden ver en el artículo Clase String en Javascript.

Vamos a realizar seguidamente algunas comprobaciones para asegurarnos que la fecha es correcta, es decir, que tenemos un valor numérico como día, otro como mes y otro como año. Si no es así devolveremos false, que debería interpretarse como que la función es incapaz de calcular la edad, porque la fecha de nacimiento pasada no es correcta.

A continuación restaremos el número de años de la fecha actual, que podrían ser 2003, con el número de año de la fecha de nacimiento, que será algo como 1975. En este caso nos daría 28, pero nosotros vamos a considerar 27, pues no sabemos si la supuesta persona ha cumplido años en el año en curso, o no. Es decir, hoy que es junio, si cumplió los años en marzo, esa persona ya tendría 28 años, pero si cumple los años en agosto, tendría ahora 27 años.

Así que nuestro próximo paso será saber en qué mes cumplió años la persona y de ello podríamos tener varias situaciones que vamos a resumir.

El script Javascript para calcular la edad

Calcular la edad en Javascript

Bueno, con estas explicaciones esperamos que cualquiera con un nivel medio de Javascript pudiera realizar el código de esta función, pero el objetivo es mostraros nuestra propuesta de código, que está comentada para que se pueda entender fácilmente.

//calcular la edad de una persona
//recibe la fecha como un string en formato español
//devuelve un entero con la edad. Devuelve false en caso de que la fecha sea incorrecta o mayor que el dia actual
function calcular_edad(fecha){

    //calculo la fecha de hoy
    hoy=new Date()
    //alert(hoy)

    //calculo la fecha que recibo
    //La descompongo en un array
    var array_fecha = fecha.split("/")
    //si el array no tiene tres partes, la fecha es incorrecta
    if (array_fecha.length!=3)
       return false

    //compruebo que los ano, mes, dia son correctos
    var ano
    ano = parseInt(array_fecha[2]);
    if (isNaN(ano))
       return false

    var mes
    mes = parseInt(array_fecha[1]);
    if (isNaN(mes))
       return false

    var dia
    dia = parseInt(array_fecha[0]);
    if (isNaN(dia))
       return false


    //si el año de la fecha que recibo solo tiene 2 cifras hay que cambiarlo a 4
    if (ano<=99)
       ano +=1900

    //resto los años de las dos fechas
    edad=hoy.getYear()- ano - 1; //-1 porque no se si ha cumplido años ya este año

    //si resto los meses y me da menor que 0 entonces no ha cumplido años. Si da mayor si ha cumplido
    if (hoy.getMonth() + 1 - mes < 0) //+ 1 porque los meses empiezan en 0
       return edad
    if (hoy.getMonth() + 1 - mes > 0)
       return edad+1

    //entonces es que eran iguales. miro los dias
    //si resto los dias y me da menor que 0 entonces no ha cumplido años. Si da mayor o igual si ha cumplido
    if (hoy.getUTCDate() - dia >= 0)
       return edad + 1

    return edad
}

Nota: Para entender esta función será necesario saber que cuando se ejecuta return dentro de una función se devuelve el valor indicado y se sale de la función, sin que se puedan ejecutar otras sentencias que existan debajo del return.

Miguel Angel Alvarez

Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...

Manual