Sumar días a una fecha en JavaScript (2026)

Para sumar días a una fecha en JavaScript, lo más sencillo es usar setDate() junto con getDate(): fecha.setDate(fecha.getDate() + dias). JavaScript ajusta solo el cambio de mes o de año. Aquí tienes una función reutilizable que admite fechas en texto, la versión moderna con la Temporal API, y cómo sumar también semanas, meses o años.

Actualizado: junio 2026 — incluye la nueva Temporal API (ya disponible en Chrome 144+, Firefox 139+ y Node.js 26).

La forma rápida (con Date)

Si ya tienes un objeto Date, sumar días es una línea:

const fecha = new Date();
fecha.setDate(fecha.getDate() + 8); // suma 8 días a hoy

Lo mejor de setDate() es que gestiona el desbordamiento automáticamente: si sumas días que pasan al mes siguiente (o al año siguiente), JavaScript recalcula la fecha correctamente. Y si le pasas un número negativo, restas días.

Función reutilizable a partir de fechas en texto

Esta función suma (o resta, con números negativos) días a una fecha en formato dd/mm/aaaa o dd-mm-aaaa. Si no le pasas fecha, usa la actual:

function sumarDias(dias, fecha = new Date()) {
  // Admite '/' y '-' como separador
  if (typeof fecha === 'string') {
    const [d, m, a] = fecha.split(/[/-]/).map(Number);
    fecha = new Date(a, m - 1, d);
  }

  const resultado = new Date(fecha);          // copia, para no mutar la original
  resultado.setDate(resultado.getDate() + dias);
  return resultado;
}

const nueva = sumarDias(8, '01/07/2014');
console.log(nueva.toLocaleDateString('es-ES')); // 9/7/2014

Fíjate en dos buenas prácticas: creamos una copia de la fecha (new Date(fecha)) para no modificar sin querer la original, y restamos 1 al mes porque en JavaScript van de 0 a 11.

Sumar semanas, meses o años

El mismo patrón sirve para otras unidades, cada una con su método:

const f = new Date('2014-07-01');

f.setDate(f.getDate() + 14);        // + 2 semanas (14 días)
f.setMonth(f.getMonth() + 3);       // + 3 meses
f.setFullYear(f.getFullYear() + 1); // + 1 año

La forma moderna: la Temporal API

La nueva Temporal API (estándar oficial en ECMAScript 2026) hace esto mucho más claro y sin efectos secundarios, porque sus fechas son inmutables:

const fecha = Temporal.PlainDate.from('2014-07-01');

const nueva = fecha.add({ days: 8 });
console.log(nueva.toString()); // 2014-07-09

// También admite varias unidades a la vez:
fecha.add({ months: 3, days: 14 });
fecha.subtract({ days: 8 }); // restar es igual de fácil

Cada operación devuelve una fecha nueva sin tocar la original, y puedes combinar years, months, weeks y days en una sola llamada. Sobre compatibilidad: Temporal ya funciona en Chrome 144+, Firefox 139+ y Node.js 26, pero Safari aún no la soporta del todo, así que para producción valida tus navegadores objetivo o usa un polyfill. La versión con Date de arriba es la opción universal de momento.

Mostrar la fecha con un formato bonito (Intl)

Para presentar la fecha en español de forma natural, usa Intl.DateTimeFormat (o toLocaleDateString):

const formato = new Intl.DateTimeFormat('es-ES', { dateStyle: 'long' });
console.log(formato.format(nueva)); // "9 de julio de 2014"

Resumen

Con Date, sumar días es setDate(getDate() + n), y el mismo patrón vale para meses (setMonth) y años (setFullYear). Con la Temporal API es fecha.add({ days: n }), inmutable y legible. Y con Intl lo muestras con buen formato.

Posts relacionados

¿Necesitas un desarrollo web o app a medida?

Soy desarrollador freelance (web, iOS, Android y multiplataforma). Si tienes un proyecto entre manos y necesitas que alguien lo saque adelante, pídeme presupuesto sin compromiso.

Un saludo, y si aún no lo has hecho no olvides suscribirte a mi blog para no perderte los próximos posts  :-),

También puedes seguirme en Twitter en ‎@revi_apps y no olvides que me ayudas mucho si compartes este post en las redes sociales.

29 comentarios en “Sumar días a una fecha en JavaScript (2026)”

    1. Hola Edisson, muchas gracias por avisar del error, efectivamente la función fallaba cuando se excedía del año.
      He actualizado la función utilizando Date.UTC en lugar de setTime.
      En las pruebas que he realizado la nueva función funciona correctamente sumando 10 días a 23/12/1978.

      Un saludo

      1. si sumo 28 días a la fecha 15/11/2014, me devuelve la fecha 10/00/2015… 🙁 🙁
        Además puede dar como resultado 31 de septiembre que es una fecha que no existe, y otros ejemplos similares.
        Qué puede pasar?

        1. Gracias por avisar Gustavo, efectivamente la función no calculaba bien algunas fechas, misterios del manejo de fechas de javascript ;-), he modificado de nuevo la función y en las pruebas que he realizado devuelve resultados correctos, si encontráis algún fallo agradezco que me lo comentéis.

          Un saludo

  1. hola , esta función me ha sido muy útil, pero si deseo cambiar el formato a que sea mm/dd/aaaa, bastaría con modificar «var sFecha = fecha || (Fecha.getDate() + «/» + (Fecha.getMonth() +1) + «/» + Fecha.getFullYear()); » por var sFecha = fecha || ((Fecha.getMonth() +1) + «/» + Fecha.getDate() + «/» + Fecha.getFullYear()); y el resultado según el formato que deseo?

    porque lo intente y no me resulta, no se que podria cambiar en las operaciones, agradezco mucho esta aportación y la respuesta que me den 🙂

    excelente dia!

    1. Hola Diana, muchas gracias por comentar.

      Para utilizar la función con el formato mm/dd/aaaa tienes dos opciones:
      Transformar la fecha que deseas usar al formato dd/mm/aaaa y despues el resultado volverlo a transformar al formato mm/dd/aaaa, o si prefieres que la función use siempre el formato dd/mm/aaaa tienes que cambiar la función quedando de esta manera:

      sumaFecha = function(d, fecha)
      {
      var Fecha = new Date();
      var sFecha = fecha || ((Fecha.getMonth() +1) + «/» + Fecha.getDate() + «/» + Fecha.getFullYear());

      var sep = sFecha.indexOf(‘/’) != -1 ? ‘/’ : ‘-‘;
      var aFecha = sFecha.split(sep);

      var dias = d || 0;

      var fFecha = Date.UTC(aFecha[2],aFecha[0],aFecha[1])+(86400000*dias); // 86400000 son los milisegundos que tiene un día

      var fechaFinal = new Date(fFecha);

      var anno = fechaFinal.getFullYear();
      var mes = fechaFinal.getMonth();
      var dia = fechaFinal.getDate();
      var mes = (mes < 10) ? ("0" + mes) : mes;
      var dia = (dia < 10) ? ("0" + dia) : dia;
      var fechaFinal = mes+sep+dia+sep+anno;

      return (fechaFinal);

      }

      Un saludo y espero que se sirva de ayuda 🙂

      1. muchas gracias! tenia la idea que tenia que cambiar fFecha pero no estaba segura que orden debia llevar… gracias 🙂 me ha sido muy últil esta función

        saludos!

    1. Hola Pablo, gracias por comentar.La función no trata a todos todos los meses como si tuvieran 31 días, Se genera con el objeto Date de javascrit en función de los mili segundos transcurridos, el objeto Date tiene en cuenta los días que tiene cada mes.

      Un saludo

  2. No se si sera un error, pero si paso la siguiente fecha 12/10/2015 y d = 0 retorna el valor de 11/10/2015.. y si paso d = 1 retorna 12/10/2015

    en mi caso al parametro d le sume 1 y me funciona.. Saludos!

  3. Disculpa el error fue de mi parte debido a que modifique algo de la funcion y no me percate de cambiar otra parte.. Yo queria que la fecha la recibiera en formato «aaaa-mm-dd»..

    Gracias de verdad por este aporte.

  4. Hola Amigo gracias por el aporte….Habria alguna forma de que solo recibiera un parametro del tiempo que quiero que cambie….. y la fecha que cogiera la actual?

  5. Eduardo Alvarez

    Hola, me fue de mucha ayuda tu función. Sería posible que la misma al recibir una fecha vacía, o al no recibirla, no me tome por defecto la actual, sino que no me muestra ningún valor? Gracias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Scroll al inicio