31 de julio de 2026

Cómo calcular la edad o los días entre dos fechas sin equivocarte por uno

Foto de Marco Orta Marco Orta | 9 min de lectura
Compartir
Tabla de Contenidos

    Calcular la edad o los días entre dos fechas parece una resta y no lo es: los meses no miden lo mismo, los bisiestos existen y el día final a veces cuenta y a veces no. Esas tres cosas son las que producen el clásico error de «un día de más» (o un año de más) en plazos, edades y vencimientos. En esta guía está la cuenta rápida, el método exacto y cómo hacerlo en Excel, JavaScript y PHP.

    Si solo quieres el resultado, esta herramienta hace las dos operaciones al instante y sin registro:

    La cuenta rápida: año actual menos año de nacimiento

    Para saber la edad aproximada basta una resta: 2026 − 1994 = 32. Pero esa cifra solo es la edad real si la persona ya cumplió años este año. Si su cumpleaños aún no llega, tiene un año menos.

    La regla completa, en dos pasos:

    1. Resta los años: año actual − año de nacimiento.
    2. Si el cumpleaños de este año todavía no ha pasado, réstale 1 al resultado.

    Por eso «2026 menos 32» tiene dos respuestas válidas: quien hoy tiene 32 años nació en 1994 si ya sopló las velas este año, o en 1993 si todavía no. Cualquier calculadora seria hace este ajuste sola; la resta a secas se equivoca en aproximadamente la mitad de los casos — todos los días del año anteriores al cumpleaños.

    Cómo calcular la edad exacta en años, meses y días

    Cuando necesitas la edad fina —para un documento, un contrato o simple curiosidad— la forma correcta es restar por columnas, igual que una resta con llevadas pero en calendario:

    1. Días: resta los días. Si no alcanza, pide prestado un mes (se suman los días del mes anterior a la fecha final, no 30 fijos).
    2. Meses: resta los meses (menos el prestado, si lo hubo). Si no alcanza, pide prestado un año (+12 meses).
    3. Años: resta los años restantes.

    Ejemplo con fechas reales: del 15 de marzo de 1994 al 31 de julio de 2026.

    • Días: 31 − 15 = 16 días ✓ (no hay préstamo)
    • Meses: 7 − 3 = 4 meses
    • Años: 2026 − 1994 = 32 años

    Resultado: 32 años, 4 meses y 16 días. El detalle de «pedir prestado los días del mes anterior» es lo que hace que este cálculo no sea una división simple: un mes prestado puede valer 28, 29, 30 o 31 días según cuál sea. Es exactamente el motivo por el que “2 años y 3 meses” y “820 días” no son intercambiables: miden el mismo intervalo con unidades de tamaño distinto.

    Cuántos días hay entre dos fechas

    Aquí la trampa no son los meses sino si el día final entra o no en la cuenta:

    • Días transcurridos (lo que devuelven las calculadoras y los lenguajes de programación): del 1 al 10 de marzo hay 9 días, no 10. Es la diferencia pura: fecha final − fecha inicial.
    • Días ocupados (noches de hotel no: justo lo contrario — días de vacaciones, jornadas de alquiler, días naturales de un permiso): quieres incluir ambos extremos, así que súmale 1 al resultado anterior.

    La confusión entre ambas convenciones es la fuente número uno de plazos mal contados. Antes de pelearte con la cuenta, decide cuál de las dos necesitas; la resta es la misma, solo cambia el +1.

    Los años bisiestos no requieren ningún truco si la cuenta se hace sobre el calendario real: el 29 de febrero es un día como cualquier otro y suma uno más. Solo se vuelven un problema cuando alguien aproxima con «un año = 365 días»: en intervalos largos el error se acumula a razón de un día cada cuatro años. Por eso 26 años no son 26 × 365 = 9 490 días, sino unos 9 496 o 9 497 según cuántos bisiestos atraviese el intervalo.

    Sumar o restar días a una fecha (plazos y vencimientos)

    La otra operación de calendario que aparece en la vida real: «¿en qué fecha caen 90 días a partir de hoy?». La mecánica es ir consumiendo meses completos:

    Del 31 de julio de 2026, 90 días hacia adelante:

    • hasta el 31 de agosto → 31 días (quedan 59)
    • hasta el 30 de septiembre → 30 días (quedan 29)
    • 29 días de octubre → 29 de octubre de 2026 (cae en jueves)

    Dos detalles que muerden:

    • Sumar meses no es sumar 30 días. «Un mes» desde el 31 de enero no puede dar 31 de febrero; la convención estándar (la misma de Excel y de los lenguajes de programación) ajusta al último día válido del mes destino: 28 o 29 de febrero. Revisa siempre los saltos de mes cuando partes de un día 29, 30 o 31.
    • Días naturales ≠ días hábiles. Todo lo de este artículo cuenta días naturales (todos los del calendario). Si tu plazo es en días hábiles, la cuenta depende de fines de semana y festivos de tu país, y ninguna fórmula genérica lo resuelve sin ese calendario.

    Cómo hacerlo en Excel o Google Sheets

    Con la fecha inicial en A1 y la final en B1:

    Qué quieresFórmulaResultado con 15/03/1994 → 31/07/2026
    Días entre las dos=B1-A111 826
    Años completos (edad)=SIFECHA(A1;B1;"Y")32
    Meses sueltos=SIFECHA(A1;B1;"YM")4
    Días sueltos=SIFECHA(A1;B1;"MD")16

    SIFECHA (DATEDIF en inglés) es la función clásica para edades: no aparece en el autocompletado de Excel pero funciona en todas las versiones y en Google Sheets. La resta directa =B1-A1 devuelve días transcurridos — recuerda el +1 si tu caso son días ocupados.

    Cómo hacerlo en código (JavaScript y PHP)

    En JavaScript, la diferencia en días es una resta de milisegundos; para la edad exacta lo sensato es una librería de fechas, pero la versión a mano es corta:

    const inicio = new Date("1994-03-15");
    const fin = new Date("2026-07-31");
    
    // Días transcurridos (UTC para esquivar cambios de hora)
    const dias = (fin - inicio) / 86_400_000; // 11826
    
    // Edad en años completos, con el ajuste de cumpleaños
    let edad = fin.getFullYear() - inicio.getFullYear();
    const cumplePendiente =
      fin.getMonth() < inicio.getMonth() ||
      (fin.getMonth() === inicio.getMonth() && fin.getDate() < inicio.getDate());
    if (cumplePendiente) edad--; // 32
    

    En PHP el trabajo sucio ya está hecho: DateTime::diff() devuelve años, meses, días y el total de días en un solo objeto:

    $inicio = new DateTimeImmutable('1994-03-15');
    $fin = new DateTimeImmutable('2026-07-31');
    
    $d = $inicio->diff($fin);
    // $d->y = 32, $d->m = 4, $d->d = 16, $d->days = 11826
    

    Si trabajas con marcas de tiempo Unix en vez de fechas de calendario, el conversor de timestamps hace la traducción en ambos sentidos.

    Resumen

    • Edad rápida: resta de años menos 1 si el cumpleaños no ha llegado.
    • Edad exacta: resta por columnas pidiendo prestado al mes anterior (que vale 28-31 días, no 30).
    • Días entre fechas: decide antes si el día final cuenta (+1 para días ocupados).
    • Plazos: sumar meses ajusta al último día válido; sumar días es exacto.
    • Bisiestos: gratis si cuentas sobre el calendario real; un día de error cada 4 años si aproximas con 365.

    Y si la cuenta es de una sola vez, la calculadora de fechas y edad te da las dos lecturas —años/meses/días y totales— sin instalar nada.

    Compartir

    Buscar

    Etiquetas

    Tutorial Laravel PHP IA JavaScript Buenas Prácticas Desarrollo Web Laravel 13 Seguridad Claude SEO Expresiones Regulares Manipulación de Texto Frontend OpenAI