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
- Calcular los días transcurridos entre dos fechas en JavaScript — la operación complementaria a esta.
- Sumar o restar días a una fecha con PHP — cómo hacerlo en el servidor.
¿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.

Si a la fecha 23/12/1978 le sumo 10 días la función no cambia el año
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
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?
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
Ahora funciona bien. Muchas gracias!!! 🙂
Muy buena la función Gracias.
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!
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 🙂
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!
Hola . Muy buena función pero no se si me confundo al creer que todos los meses los calcula con 31 días.
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
Buena funcion doc. Te pasaste!
Amigo de verdad muchas gracias por este gran aporte.
Me fue de mucha utilidad. Saludos cordiales.
Hola que una consulta y en JAVA como seria ?
Hola,
Mira a ver si esto te puede ayudar:
http://developando.com/blog/java-sumar-restar-horas-dias-fecha
Una consulta y como seria en Código JAVA?
Muchas gracias, excelente aporte amigo..
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!
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.
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?
Hola Johan, la función puede recibir un único parámetro indicando el número de días a sumar, si no introduces el segundo parámetro ya toma por defecto la fecha actual.
Gracias por su ayuda!!! me sirvio mucho
Muy Buena funcion te pasaste!! saludos
Que tal este retorno, así se puede manipular como un objeto date de javascript.
return new Date(anno, mes – 1, dia);
Hola Esteban, gracias por el aporte 🙂
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
Hola, como sería para sumar minutos a la fecha?
aun buenisimo