Portada | Monotemáticos | Secciones | Desarrolladores | Comunidad | Servicios | Servicios profesionales | RSS
Desde 0 | HTML | CSS | ASP | PHP | AJAX | Javascript | Promoción de webs | Rentabilidad de webs
Directorio | Manuales | Scripts | FAQs | Programas | Artículos Copyleft | Actualidad | La Cosecha | Colabora
Registrarse | Vuestras páginas | Foros del web | Lista de correo | Boletín de novedades
Generador METAs | Compras | Busca cursos
Alojamiento | Dominios.es | Micropagos SMS | Buscadores | Patentes, marcas | Creación web | Multimedia | Videos
Desarrollo Freelance | Buscar proyectos | Buscar profesionales | Solicitar desarrollo

Calcular la edad en Javascript


Realizamos y explicamos una función que recibe una fecha de nacimiento y devuelve el número de años desde la fecha, es decir, la edad.


12/6/03 - 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.

El método de trabajo

Nosotros estamos pensando en recibir una fecha en formato español: algo como "12/10/1975", de tipo string. Lo primero será 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), que devuelve un array con el valor de cada una de las partes de la cadena, utilizando como separador 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 tres casos.

  1. Si el mes actual es menor que el mes de nacimiento. Entonces es que no ha cumplido años todavía en este periodo anual. (Los años, en el ejemplo anterior, serían 27)
  2. Si el mes actual es mayor que el mes de nacimiento, querría decir que esa persona sí ha celebrado su cumpleaños este año. (Los años, en el ejemplo anterior, serían 28)
  3. Si los dos meses son iguales, deberíamos fijarnos en el día, de una manera similar a como se ha realizado para los meses:
    1. Si el día actual es menor que el día de nacimiento, es que le faltan unos días todavía para su cumpleaños (Dado el ejemplo anterior, los años serían 27).
    2. Si el día actual es mayor o igual que el día de nacimiento es que sí ha cumplido años (Dado el ejemplo anterior, los años serían 28).
El script para calcular la edad

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.

 Seguir navegando a partir aquí:
+ 1 manual relacionado
+ 1 categoria relacionada
+ 2 comentarios (Añadir)
+ 14 comentarios no revisados

 Autoría, licencia y acciones sobre este artículo

Informe de Miguel Angel Alvarez*
Director de DesarrolloWeb.com

Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.

* Para consultas técnicas utilizar la lista de correo.

Versión imprimible Versión imprimible del artículo
Enviar artículo por e-mail Enviar artículo por e-mail
Añadir un comentario al artículo Publicar un comentario del artículo

Manuales relacionados con este artículo
Dentro de Taller de Javascript

Categorias relacionadas
A través de las categorías de nuestro directorio se pueden encontrar otro tipo de recursos relacionados con este artículo:
+ Entrar en Scripts en Javascript


 Comentarios de los visitantes
Los comentarios de los visitantes son para ampliar la información del artículo. Cualquiera puede participar.
Se muestran 2 comentarios revisados

 Comentario de Agustin Lopez
18/5/05 
hola, Ampliando un poco el tema sobre el cálculo con fechas, resulta muy común necesitar la cantidad de días entre dos fechas dadas y un método es el siguiente:

- Encontrar la diferencia en dias entre dos fechas:

a) leer las fechas de la forma o asignar las fechas a campos variables

para el ejemplo, asumimos que usamos las fechas en formato ANSI que es AAAA-MM-DD

b) Leemos las fechas de los campos de una forma, que se llama, por ej. "F":

var DF=document.f;

var Fini = DF.fecha_inicial.value;
var Ffin = DF.fecha_final.value;

c) Creamos una expresion regular, para separar los elementos de las fechas (aaaa,mm,dd) para crear verdaderos objetos tipo Date():

// esta es la expresion regular
var regex = /(\d+)-(\d+)-(\d+)/;

// la "fecha inicial"
var aFini = Fini.replace(er,"$1");
var mFini = Fini.replace(er,"$2");
var dFini = Fini.replace(er,"$3");

// la "fecha final"
var aFfin = Ffin.replace(er,"$1");
var mFfin = Ffin.replace(er,"$2");
var dFfin = Ffin.replace(er,"$3");

d) ahora creamos los objetos Date:

var oFini = new Date(aFini,mFini,dFini);
var oFfin = new Date(aFfin,mFfin,dFfin);

e) relizamos la operación, ej. una resta:

var operacion = oFini - oFfin;

Ahora operacion, contiene la diferencia (en este caso) entre ambas fechas en milisegundos, por lo que para obtener la diferencia en dias:

operacion = operacion/86400000;

Claro que podemos hacer:
var operacion =(oFini-oFfin)/86400000;

y listo!.

Espero que les sea de utilidad.
AL.

Hola de nuevo,

cometí un pequeño error,

en las lineas que dicen:

var xFxxx = replace(er,xx);

debe decir;

var xFxxx = replace(regex,xx);

 Comentario de Miguel Angel Alvarez
09/8/05 
Una manera de utilizar esta función en un formulario es la siguiente:




Se entiende que se debe introducir una fecha válida en el campo de texto y pulsar el botón para calcular la edad. La edad se mostrará en el mismo campo de texto.

Por supuesto, se debe colocar el código de la función calcular_edad() en la página, preferiblemente en la cabecera.


Añadir un comentario al artículo Añadir un comentario del artículo
 Comentarios sin revisar
Entre los comentarios no revisados puede haber algunos interesantes que se hayan enviado recientemente.
 Se han encontrado 14 comentarios sin revisar

Ver el comentario no revisadoVer los comentarios no revisados
Añadir un comentario al artículo Añadir un comentario del artículo



Enlaces:
Maestrosdelweb
  Ir arriba

Manuales relacionados
+Taller de Javascript
Categorías
+Scripts en Javascript

Lectura recomendada

Compra este libro en Agapea, la librería urgente a domicilio.

Tienda DesarrolloWeb

DesarrolloWeb.com | Copyright | Anunciese | Acerca de | Datos legales | Contacta | Por GuiarteMultimedia