Volver al Blog
4 min read

Cómo calcular la edad en JavaScript (DOB a años, meses, días)

Aprenda formas prácticas de calcular la edad a partir de una fecha de nacimiento en JavaScript. Incluye años, meses y días exactos, una opción de fecha actualizada y errores comunes como zonas horarias y años bisiestos.

Cómo calcular la edad en JavaScript (DOB a años, meses, días)

Si necesitas calcular la edad de una persona a partir de una fecha de nacimiento (DOB) en JavaScript, puedes hacerlo de diferentes maneras. La clave es decidir qué quieres decir con edad:

  • Edad en años cumplidos (más común)
  • Edad exacta (años, meses, días)
  • Edad a partir de una fecha específica (no siempre hoy)

1) Calcular edad en años cumplidos (sencillo y correcto)

Este es el enfoque estándar: restar años y ajustar si el cumpleaños aún no ha ocurrido este año.

función edadEnAños(fecha de nacimiento, a partir de = nueva fecha()) {
  nacimiento constante = nueva fecha (fecha de nacimiento);
  const ref = nueva fecha (a partir de);

  let años = ref.getFullYear() - nacimiento.getFullYear();
  const m = ref.getMonth() - nacimiento.getMonth();

  if (m < 0 || (m === 0 && ref.getDate() < nacimiento.getDate())) {
    años--;
  }

  años de retorno;
}

Ejemplo: DOB 2000-02-10 y a partir de 2026-02-09 da 25 (cumpleaños mañana).

2) Calcular la edad exacta (años, meses, días)

Si desea un desglose exacto, puede calcular primero los años, luego los meses y luego los días "tomando prestado" del mes anterior cuando sea necesario.

función EdadExacta(fecha de nacimiento, a partir de = nueva fecha()) {
  nacimiento constante = nueva fecha (fecha de nacimiento);
  const ref = nueva fecha (a partir de);

  let años = ref.getFullYear() - nacimiento.getFullYear();
  let meses = ref.getMonth() - nacimiento.getMonth();
  let días = ref.getDate() - nacimiento.getDate();

  // Ajustar los días tomando prestado del mes anterior
  si (días < 0) {
    const mesprev = nueva fecha(ref.getFullYear(), ref.getMonth(), 0); // día 0 = último día del mes anterior
    días += mesprev.getDate();
    meses--;
  }

  // Ajustar meses tomando prestado del año anterior
  si (meses < 0) {
    meses += 12;
    años--;
  }

  devolver {años, meses, días};
}

Nota: Los casos extremos de fecha del mes (como una fecha de nacimiento el día 31) requieren pruebas cuidadosas. Si necesita algo sólido en todas las configuraciones regionales y casos extremos, considere usar una biblioteca de fechas bien probada.

3) Utilice una fecha "a partir de" para la edad en una fecha pasada o futura

Muchas aplicaciones necesitan antigüedad en una fecha de referencia específica (seguro, reglas de elegibilidad, límites del año escolar). Ambas funciones anteriores aceptan un parámetro asOf, por lo que puedes hacer:

ageInYears('1995-06-20', '2030-01-01');
Edad exacta('1995-06-20', '2030-01-01');

Errores comunes (y cómo evitarlos)

  • Zonas horarias: el análisis de AAAA-MM-DD puede comportarse de manera diferente en distintos entornos. Si solo le importa la fecha, cree la fecha en hora local: nueva fecha(año, mesíndice, día).
  • Cumpleaños en días bisiestos: decide tu regla para el 29 de febrero en años no bisiestos (28 de febrero o 1 de marzo). Sea consistente.
  • Entradas no válidas: validan que la fecha de nacimiento sea una fecha real y no futura.

Opción rápida: utiliza la calculadora de edad online

Sisolo necesita la respuesta (o desea validar su implementación), use nuestra calculadora gratuita: Calcular edad en línea.

Guías relacionadas

Preguntas frecuentes

¿Cuál es la forma más precisa de calcular la edad?

En la mayoría de los casos, "años completos" (edad en años completos) es el estándar. Si necesita un desglose completo, calcule primero los años, luego los meses, luego los días y pruebe casos extremos como la duración de los meses y los años bisiestos.

¿Por qué JavaScript a veces proporciona el día incorrecto para una cadena de fecha?

Porque nueva Fecha('AAAA-MM-DD') puede interpretarse como UTC en algunos entornos. Si le interesa la fecha del calendario local, analice las partes y use nueva fecha(y, m, d).