Agregar días a la fecha de JavaScript

1097

Cómo agregar días a la corriente Dateusando JavaScript. ¿JavaScript tiene una función integrada como .Net AddDay?

Ceniza
fuente

Respuestas:

1212

Puede crear uno con: -

Date.prototype.addDays = function(days) {
    var date = new Date(this.valueOf());
    date.setDate(date.getDate() + days);
    return date;
}

var date = new Date();

alert(date.addDays(5));

Esto se encarga de incrementar automáticamente el mes si es necesario. Por ejemplo:

8/31 + 1 día se convertirá en 9/1 .

El problema con el uso setDatedirecto es que es un mutador y es mejor evitar ese tipo de cosas. ECMA consideró adecuado tratarlo Datecomo una clase mutable en lugar de una estructura inmutable.

AnthonyWJones
fuente
17
Simplificado:Date.prototype.addDays=function(d){return new Date(this.valueOf()+864E5*d);};
Duncan
27
@ Duncan ¿Estás seguro de que esto es lo mismo que el anterior? Este simplemente agrega 24 horas, pero un día no siempre es 24 horas . Supongo que la pregunta es cómo incrementar la parte de la fecha en 1 día, sin cambiar la parte del tiempo.
Tamás Bolvári
88
864E5por alguna razón prefiero escribir 24*60*60en mi código :)
Mars Robertson
62
Chicos, no utilicen el método de agregar 864E5 porque esto no toma la diferencia de horario de verano donde los días pueden ser de 23 o 25 horas.
sbrbot
12
Para aquellos de ustedes preocupados por el horario de verano, no lo hagan. Estos algoritmos cambian la fecha subyacente, no cómo se interpreta la fecha. El horario de verano se implementa en los captadores y establecedores de la fecha: los captadores para restar una hora en el verano y el configurador para agregar esa hora nuevamente durante el verano para normalizar la hora. Pero solo cuando se usa una hora absoluta, no es necesario interpretar las horas relativas. Es por eso que las matemáticas de fecha funcionan. En mi humilde opinión ...
Gerard ONeill
755

Respuesta correcta :

function addDays(date, days) {
  var result = new Date(date);
  result.setDate(result.getDate() + days);
  return result;
}

Respuesta incorrecta :

Esta respuesta a veces proporciona el resultado correcto, pero a menudo devuelve el año y mes incorrectos. El único momento en que esta respuesta funciona es cuando la fecha en la que está agregando días tiene el año y mes actual.

// Don't do it this way!
function addDaysWRONG(date, days) {
  var result = new Date();
  result.setDate(date.getDate() + days);
  return result;
}

Prueba / Ejemplo

Comprueba este JsFiddle

sobrantes
fuente
@bzlm, sí, esencialmente lo mismo. Simplemente no modifica el prototipo de fecha. También quería señalar los defectos en la respuesta principal.
sparebytes
La respuesta aceptada fue editada hace quince días para señalar sus defectos. ¿Crees que necesita más edición? ¿Si es así, cómo?
bzlm
77
@bzlm: Sí, creo que la nota debería decir "este enfoque falla si la fecha 'desde' no es el mismo año o mes que la fecha actual ". Todavía me preocupa que los usuarios echen un vistazo a la respuesta y no lean la advertencia, ya que no se destaca. Gracias.
sparebytes
3
Creo que, incluso si este trabajo no es correcto. No existe tal constructor para Date: var result = new Date (date); , consulte http://www.w3schools.com/js/js_dates.asp . Incluso si esto generalmente funciona, a veces puede conducir a resultados incorrectos debido a la conversión a cadena y viceversa. Debe ser var result = new Date (date.getTime ());
Marcin
2
@AnkitBalyan, Ver otras respuestas. Es posible que no funcione correctamente debido al horario de verano
sparebytes
188
var today = new Date();
var tomorrow = new Date();
tomorrow.setDate(today.getDate()+1);

Tenga cuidado, porque esto puede ser complicado. Al configurar "mañana", solo funciona porque su valor actual coincide con el año y el mes de "hoy". Sin embargo, establecer un número de fecha como "32" normalmente seguirá funcionando bien para pasar al próximo mes.

Joel Coehoorn
fuente
1
¿Si? ¿Pero qué es esto? (corrió el 31 de marzo de 2010): hoy = nueva Fecha (); mañana = nueva fecha (); tomorrow.setDate (today.getDate () + 1); alert (tomorrow.getMonth ()); Dice "3". alerta (mañana); es correcto ... ¿por qué?
d -_- b
12
@sims mes es 0 indexado. El mes 3 es abril
Joel Coehoorn
77
¿Por qué la necesidad de crear 2 objetos de fecha separados? ¿Por qué no simplemente usar el mismo objeto de fecha var d = new Date(); d.setDate( d.getDate() + 1 );:?
Joseph Silber
8
Este enfoque no funciona a través de los años. Si su fecha de inicio es de hace unos años, getDate()devuelve el día de ese año . Luego, llamar setDateestablece el día en el año actual . Por lo tanto, NO es una buena solución general. La respuesta de @ AnthonyWJones en realidad funciona correctamente.
Drew Noakes
3
@ DrewNoakes: su afirmación de que no funciona durante años es incorrecta. getDate devuelve el día del mes, no el "día de ese año". Por ejemplo, var d = new Date(2015,11,30);d.setDate(d.getDate() + 370)da 3 de enero de 2017, que cruza 2 años.
RobG
124

Mi solución simple es:

nextday=new Date(oldDate.getFullYear(),oldDate.getMonth(),oldDate.getDate()+1);

Esta solución no tiene problemas con el horario de verano. Además, uno puede agregar / sustituir cualquier compensación por años, meses, días, etc.

day=new Date(oldDate.getFullYear()-2,oldDate.getMonth()+22,oldDate.getDate()+61);

Es el código correcto.

sbrbot
fuente
13
Nota: esto restablece el tiempo a 00:00:00 (puede ser un problema o no)
Álvaro González
No funciona el último día de ningún mes, como usted dice. Hace que esto sea inutilizable los 12 días del año. ¡Suena como una pesadilla para depurar!
Drew Noakes
66
No Drew, es utilizable para todos los días del año. Puede poner un desplazamiento de fecha mayor que 31 o un desplazamiento de mes mayor que 12 y esta función lo recalculará como día en el próximo mes o mes en el próximo año. Entonces, por ejemplo: nextday = new Date (oldDate.getFullYear (), oldDate.getMonth (), oldDate.getDate () + 40); Está perfectamente bien el código.
sbrbot
hay getMonth () + 22: ¿qué crees que funcionará?
sbrbot
1
Estoy de acuerdo, úsalo de esta manera. Acabamos de tener un error debido al horario de verano porque estábamos usando setDate.
Jelle
95

Estas respuestas me parecen confusas, prefiero:

var ms = new Date().getTime() + 86400000;
var tomorrow = new Date(ms);

getTime () nos da milisegundos desde 1970, y 86400000 es la cantidad de milisegundos en un día. Por lo tanto, ms contiene milisegundos para la fecha deseada.

El uso del constructor de milisegundos da el objeto de fecha deseado.

Jason
fuente
46
Esta solución no tiene en cuenta el horario de verano. Entonces, por ejemplo, esto devolverá la misma fecha, 23 horas después: new Date(new Date('11/4/2012').getTime() + 86400000)
Noah Harrison
66
@NoahMiller ¡El problema que mencionas podría ser una característica, no un error! Agregar 24 horas por día es a veces lo correcto, con el objetivo de conocer el tiempo resultante en función del horario de verano. La fecha en que regresa su ejemplo tiene un valor de hora de las 11 p.m.el 4 de noviembre, que es lo que 24 horas más tarde es ese día en particular. El póster original preguntaba acerca de la fecha y hora, lo que parece indicar un cierto deseo por las horas correctas del día. Esta respuesta es correcta si se encuentra en el caso en que su objetivo es el tiempo de 24 horas después.
Andy Novocin
3
Estoy de acuerdo Noah, var d2 = nueva Fecha (d1.valueOf () + 24 * 60 * 60 * 1000) hace lo que dice, agrega un día completo de ticks a una fecha.
Corey Alix
66
Esto es absolutamente correcto para algunos casos (por ejemplo, para cookies de 1 día) y una solución más simple que la mayoría de los otros. No entiendo por qué tiene tantos votos negativos y tan pocos votos positivos: /
Matmarbon
48

Tratar

var someDate = new Date();
var duration = 2; //In Days
someDate.setTime(someDate.getTime() +  (duration * 24 * 60 * 60 * 1000));

Usar setDate () para agregar una fecha no resolverá su problema, intente agregar algunos días a un mes de febrero, si intenta agregarle nuevos días, no dará como resultado lo que esperaba.

sufyan.shoaib
fuente
26
No, esto no debe marcarse como la respuesta correcta, ya que esta solución supone que todos los días tienen 24 * 60 * 60 * 1000 segundos, ¡pero no los tiene (horario de verano)!
sbrbot
¿Alguna evidencia sobre el problema 'Feb' con setDate()? ¿Es esto: stackoverflow.com/questions/5497637/…
nobar
99
+1 Esto DEBE marcarse como la respuesta correcta. Creo que el "horario de verano" se trata de la presentación y no del valor , que es solo la cantidad de milisegundos. Desde el punto de vista del valor , el día es el número CONST de milisegundos, mientras que en términos de presentación puede variar.
desapareció el
1
@ disfated: esta no es la respuesta correcta. El día que sale del horario de verano tiene 25 horas, pero este método solo agrega 24, por lo que la fecha será la misma. Usar 24 horas para representar un día funciona si se usan métodos UTC, pero ¿por qué molestarse cuando se usa setDate es más conveniente? ;-)
RobG
38

Acabo de pasar años tratando de averiguar cuál era el acuerdo con el año sin agregar cuando seguimos los ejemplos principales a continuación.

Si desea simplemente agregar n días a la fecha que tiene, es mejor que simplemente vaya:

myDate.setDate (myDate.getDate () + n);

o la versión larga

var theDate = new Date(2013, 11, 15);
var myNewDate = new Date(theDate);
myNewDate.setDate(myNewDate.getDate() + 30);
console.log(myNewDate);

Esto de hoy / mañana es confuso. Al configurar la fecha actual en su nueva variable de fecha, desordenará el valor del año. Si trabaja desde la fecha original, no lo hará.

Rumpleteaser
fuente
77
Leyendo todas las respuestas hasta que encuentre esta joya aquí. Ahora eso tiene sentido. Es sorprendente que lo de hoy / mañana se haya copiado en casi todas las respuestas, cuando no tiene ningún sentido y no es "por razones de claridad y claridad", como dice el autor en la respuesta más votada -en el comentario más votado-, es confuso y una mala práctica y mal
Cesc
23

Si puedes, usa moment.js . JavaScript no tiene muy buenos métodos nativos de fecha / hora. El siguiente es un ejemplo de la sintaxis de Moment:

var nextWeek = moment().add(7, 'days');
alert(nextWeek);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment-with-locales.min.js"></script>

Referencia: http://momentjs.com/docs/#/manipulating/add/

usuario2910265
fuente
1
@ kpull1 el autor de la pregunta no restringió el dominio de la solución al preguntar si existe una solución integrada.
user2910265
44
Nota moderna: Moment.js es increíblemente pesado de agregar para un propósito tan pequeño. Son varios cientos de KB y no son aptos para webpack desde el primer momento.
Joshua Comeau
1
Nuestra biblioteca preferida es date-fns. Apto para paquetes web, rápido y trata las fechas como inmutables.
Freewalker
1
@LukeWilliams nunca había oído hablar de date-fns hasta ahora. Lo comprobará. Gracias.
user2910265
2
@JoshuaComeau Si lo descarga desde cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.3/moment.min.js , ocupa 53,248 bytes en el disco. Me imagino que esa es toda la bola de cera, pero no lo sé. De todos modos, lo que sea. No es gran cosa.
birdus
22
int days = 1;
var newDate = new Date(Date.now() + days * 24*60*60*1000);

CodePen

var days = 2;
var newDate = new Date(Date.now() + days * 24*60*60*1000);

document.write('Today: <em>');
document.write(new Date());
document.write('</em><br/> New: <strong>');
document.write(newDate);

Sarga
fuente
2
Voto a favor por no requerir una variable de fecha intermedia.
Jeff Lowery
esta es la mejor respuesta porque no tiene mutación
knocte
No todos los días tienen 24 h, falla durante el horario de verano y los segundos de salto.
Stephan
19

Creé estas extensiones anoche:
puede pasar valores positivos o negativos;

ejemplo:

var someDate = new Date();
var expirationDate = someDate.addDays(10);
var previous = someDate.addDays(-5);


Date.prototype.addDays = function (num) {
    var value = this.valueOf();
    value += 86400000 * num;
    return new Date(value);
}

Date.prototype.addSeconds = function (num) {
    var value = this.valueOf();
    value += 1000 * num;
    return new Date(value);
}

Date.prototype.addMinutes = function (num) {
    var value = this.valueOf();
    value += 60000 * num;
    return new Date(value);
}

Date.prototype.addHours = function (num) {
    var value = this.valueOf();
    value += 3600000 * num;
    return new Date(value);
}

Date.prototype.addMonths = function (num) {
    var value = new Date(this.valueOf());

    var mo = this.getMonth();
    var yr = this.getYear();

    mo = (mo + num) % 12;
    if (0 > mo) {
        yr += (this.getMonth() + num - mo - 12) / 12;
        mo += 12;
    }
    else
        yr += ((this.getMonth() + num - mo) / 12);

    value.setMonth(mo);
    value.setYear(yr);
    return value;
}
mark.nino.chua
fuente
77
El método .addDays () no funciona para fechas que cruzan los límites de horario de verano.
mskfisher
1
Esta es una de las mejores respuestas aquí porque (correctamente) usa el número de milis desde la epoc para representar fechas / horas, y agrega cantidades de milis para ajustes ... ¿Por qué no mantuvo esto durante "addMonths"! ? ¿Y por qué no agregar año? ¿Te aburriste?
Robin
Aparte de los meses, los períodos de tiempo se pueden representar con números estáticos. Pero los meses pueden tener cuatro duraciones diferentes. Además, cualquier período de tiempo desde Días y superior puede tener una duración variable en el horario de verano, por lo que ya no puede usar la adición basada en el tiempo sin otro nivel de complejidad. Agregué addYears () y arreglé addMonths ().
Suamere
14

Sin usar la segunda variable, puede reemplazar 7 con sus próximos x días:

let d=new Date(new Date().getTime() + (7 * 24 * 60 * 60 * 1000));
vaibhavmaster
fuente
14

restar 30 días de uso (24h = 86400000ms)

new Date(+yourDate - 30 *86400000)

Kamil Kiełczewski
fuente
Cuando intente calcular la fecha y hora, recuerde siempre que la fecha y hora se basa en milisegundos en informática ( en.wikipedia.org/wiki/System_time#Retrieving_system_time ) new Date (+ yourDate + 30 * (24 * 60 * 60 * 1000))
Ashraf Abusada
13

La solución más simple.

 Date.prototype.addDays = function(days) {
   this.setDate(this.getDate() + parseInt(days));
   return this;
 };

 // and then call

 var newDate = new Date().addDays(2); //+2 days
 console.log(newDate);

 // or

 var newDate1 = new Date().addDays(-2); //-2 days
 console.log(newDate1);

ampachts
fuente
Creo que esta es la mejor solución. Si estamos ampliando la clase Date, entonces tiene más sentido que la instancia de Date se actualice por sí misma.
Porlune
10

Gracias Jason por su respuesta que funciona como se esperaba, aquí hay una mezcla de su código y el práctico formato de AnthonyWJones:

Date.prototype.addDays = function(days){
    var ms = new Date().getTime() + (86400000 * days);
    var added = new Date(ms);
    return added;
}
Olivier
fuente
66
No tiene en cuenta el horario de verano cuando hay más o menos de 86400000 segundos en un día y puede provocar un error lógico (error de programa) en su código.
sbrbot
A veces eso es necesario. La API de eBay tiene subastas de x días que se basan en 24 horas, por lo que su artículo finalizará en un momento diferente al que sube si el estado del horario de verano cambia a mitad de la subasta. En ese caso, debe usar este tipo de función para evitar errores lógicos.
Andy Novocin
10

Tarde a la fiesta, pero si la usas, jQueryentonces hay un excelente complemento llamado Momento:

http://momentjs.com/

var myDateOfNowPlusThreeDays = moment().add(3, "days").toDate();

http://momentjs.com/docs/#/manipulating/

¡Y muchas otras cosas buenas allí!

Editar: referencia de jQuery eliminada gracias al comentario de aikeru

Observación Lima
fuente
1
momento no necesita jQuery :)
aikeru
¡Incluso mejor en ese caso!
Observación Lima
1
Sí, después de jugar con Plain ol 'JS durante demasiado tiempo, utilicé Moment, ¡y simplemente funciona (tm)!
caseyamcl
¿Por qué querrías usar el complemento cuando unas pocas líneas de JS lo harán?
frenchie
@frenchie porque, lo que comienza como unas pocas líneas de JS y porque claramente su aplicación está manipulando información relacionada con días, fechas y horas, pronto serán unas 1000 líneas de JS, luego se le pedirá que localice la aplicación en 12 idiomas y zonas horarias y desearía haber comenzado con algo así como un momento;)
Remarcar Lima el
10

Una solución diseñada para el operador de la tubería :

const addDays = days => date => {
  const result = new Date(date);

  result.setDate(result.getDate() + days);

  return result;
};

Uso:

// Without the pipeline operator...
addDays(7)(new Date());

// And with the pipeline operator...
new Date() |> addDays(7);

Si necesita más funcionalidad, le sugiero que busque en la biblioteca de fecha-fns .

sdgfsdh
fuente
8

Lo sé, pero a veces me gusta esto:

function addDays(days) {
    return new Date(Date.now() + 864e5 * days);
}
Todd
fuente
2
Este tiene más sentido para mí. Es simple, elegante y no cae rezar a los problemas que se mueven durante meses / años.
Uadrive
1
La respuesta más simple presentada. Partiendo de esto, el prototipo 'addDays' sería el siguiente:Date.prototype.addDays = function(days) {return new Date(this.getTime() + (864e5 * days));};
CrazyIvan1974
No todos los días tienen 24 h, falla durante el horario de verano y los segundos de salto.
Stephan
8

Tuve problemas con el horario de verano con la solución propuesta.

Al usar getUTCDate/ en su setUTCDatelugar, resolví mi problema.

// Curried, so that I can create helper functions like `add1Day`
const addDays = num => date => {
  // Make a working copy so we don't mutate the supplied date.
  const d = new Date(date);

  d.setUTCDate(d.getUTCDate() + num);

  return d;
}
Joshua Comeau
fuente
8

Puede usar JavaScript, no se requiere jQuery:

var someDate = new Date();
var numberOfDaysToAdd = 6;
someDate.setDate(someDate.getDate() + numberOfDaysToAdd); 
Formatting to dd/mm/yyyy :

var dd = someDate.getDate();
var mm = someDate.getMonth() + 1;
var y = someDate.getFullYear();

var someFormattedDate = dd + '/'+ mm + '/'+ y;
Rohit.007
fuente
8

Prototipo genérico sin variables, se aplica a un valor de fecha existente:

Date.prototype.addDays = function (days) {
    return new Date(this.valueOf() + days * 864e5);
}
Matteo Conta
fuente
7

Los documentos de mozilla para setDate () no indican que manejará los escenarios de fin de mes. Ver https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date

Establece la fecha()

  • Establece el día del mes (1-31) para una fecha específica de acuerdo con la hora local.

Es por eso que uso setTime () cuando necesito agregar días.

Blake Mills
fuente
Me vincularía a los documentos de ECMAScript, pero se publican en PDF; (
Blake Mills,
1
Re "los documentos de mozilla para setDate () no indican que manejará escenarios de fin de mes ". Los "documentos" se han actualizado, así que ahora lo hacen. ;-)
RobG
7

Tan simple como esto:

new Date((new Date()).getTime() + (60*60*24*1000));
Dila Gurung
fuente
2
Si bien esto agrega días UTC, utiliza métodos locales y no permite días locales que no sean de 24 horas, lo que sucede cuando cambia la compensación de zona horaria (por ejemplo, dentro y fuera del horario de verano).
RobG
6

Supongo que también daré una respuesta:
personalmente, me gusta intentar evitar la declaración de variables gratuita, las llamadas a métodos y las llamadas a constructores, ya que todos son caros en rendimiento. (dentro de lo razonable, por supuesto)
Iba a dejar esto como un comentario en la Respuesta dada por @AnthonyWJones, pero lo pensé mejor.

// Prototype usage...
Date.prototype.addDays = Date.prototype.addDays || function( days ) {
    return this.setTime( 864E5 * days + this.valueOf() ) && this;
};

// Namespace usage...
namespace.addDaysToDate = function( date, days ) {
    return date.setTime( 864E5 * days + date.valueOf() ) && date;
};

// Basic Function declaration...
function addDaysToDate( date, days ) {
    return date.setTime( 864E5 * days + date.valueOf() ) && date;
};

Lo anterior respetará el horario de verano. Es decir, si agrega una cantidad de días que cruzan el horario de verano, la hora (hora) mostrada cambiará para reflejar eso.
Ejemplo:
2 de noviembre de 2014 02:00 fue el final del horario de verano.

var dt = new Date( 2014, 10, 1, 10, 30, 0 );
console.log( dt );                  // Sat Nov 01 2014 10:30:00
console.log( dt.addDays( 10 ) );    // Tue Nov 11 2014 09:30:00

Si está buscando retener el tiempo durante el horario de verano (por lo tanto, las 10:30 seguirán siendo las 10:30) ...

// Prototype usage...
Date.prototype.addDays = Date.prototype.addDays || function( days ) {
    return this.setDate( this.getDate() + days ) && this;
};

// Namespace usage...
namespace.addDaysToDate = function( date, days ) {
    return date.setDate( date.getDate() + days ) && date;
};

// Basic Function declaration...
function addDaysToDate( date, days ) {
    return date.setDate( date.getDate() + days ) && date;
};

Entonces, ahora tienes ...

var dt = new Date( 2014, 10, 1, 10, 30, 0 );
console.log( dt );                  // Sat Nov 01 2014 10:30:00
console.log( dt.addDays( 10 ) );    // Tue Nov 11 2014 10:30:00
Duncan
fuente
6

No, JavaScript no tiene una función integrada, pero puede usar una línea de código simple

timeObject.setDate(timeObject.getDate() + countOfDays);
Vahag Chakhoyan
fuente
5

Yo uso algo como:

new Date(dateObject.getTime() + amountOfDays * 24 * 60 * 60 * 1000)

Funciona con el horario de verano:

new Date(new Date(2014, 2, 29, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)

Funciona con año nuevo:

new Date(new Date(2014, 11, 31, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)

Se puede parametrizar:

function DateAdd(source, amount, step) {
  var factor = 1;
  if (step == "day") factor = 24 * 60 * 60 * 1000;
  else if (step == "hour") factor = 60 * 60 * 1000;
  ...
  new Date(source.getTime() + amount * factor);
}
kpull1
fuente
4

Estoy usando la siguiente solución.

var msInDay = 86400000;
var daysToAdd = 5;
var now = new Date();
var milliseconds = now.getTime();
var newMillisecods = milliseconds + msInDay * daysToAdd;
var newDate = new Date(newMillisecods);
//or now.setTime(newMillisecods);

Date tiene un constructor que acepta un int. Este argumento representa milisegundos totales antes / después del 1 de enero de 1970. También tiene un método setTime que hace lo mismo sin crear un nuevo objeto Date.

Lo que hacemos aquí es convertir días a milisegundos y agregar este valor al valor proporcionado por getTime. Finalmente, damos el resultado al constructor Date (milisegundos) o al método setTime (milisegundos).

Vakhtang
fuente
No todos los días tienen 24 h, falla durante el horario de verano y los segundos de salto.
Stephan
Stephan, ¿alguna otra biblioteca tiene eso en cuenta?
Vakhtang
now.setDate(now.getDate() + days);maneja automáticamente los cambios de horario de verano. Y tengo que corregir, los segundos bisiestos se ignoran en las marcas de tiempo de JS.
Stephan
4

Editar: en lugar de setTime()(o setHours()) podría hacerlo de esta manera:

Date.prototype.addDays= function(d){
  this.setDate(this.getDate() + d);
  return this;
};

var tomorrow = new Date().addDays(1);

Antiguo:

En lugar de usar setTime()puedes usar setHours():

Date.prototype.addDays= function(d){
    this.setHours(this.getHours() + d * 24);
    return this;
};

var tomorrow = new Date().addDays(1);

Ver el JSFiddle ...

Spaark
fuente
siguiendo esta lógica, también podría agregar un día;)d.setDate(d.getDate() + 1);
Rivenfall
4

Código muy simple para agregar días de fecha en Java Script.

var d = new Date();
d.setDate(d.getDate() + prompt('how many days you want to add write here'));
alert(d);

Rana Aalamgeer
fuente
4

Hay un método setDate y getDate , que le permite hacer algo como esto:

var newDate = aDate.setDate(aDate.getDate() + numberOfDays);

Si desea restar un número de días y formatear su fecha en un formato legible por humanos, debería considerar crear un DateHelperobjeto personalizado que se vea así:

var DateHelper = {
    addDays : function(aDate, numberOfDays) {
        aDate.setDate(aDate.getDate() + numberOfDays); // Add numberOfDays
        return aDate;                                  // Return the date
    },
    format : function format(date) {
        return [
           ("0" + date.getDate()).slice(-2),           // Get day and pad it with zeroes
           ("0" + (date.getMonth()+1)).slice(-2),      // Get month and pad it with zeroes
           date.getFullYear()                          // Get full year
        ].join('/');                                   // Glue the pieces together
    }
}

// With this helper, you can now just use one line of readable code to :
// ---------------------------------------------------------------------
// 1. Get the current date
// 2. Add 20 days
// 3. Format it
// 4. Output it
// ---------------------------------------------------------------------
document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), 20));

(ver también este violín )

John Slegers
fuente
4

Extender el prototipo en JavaScript puede no ser una buena idea , especialmente en bases de código profesionales.

Lo que quieres hacer es extender la Dateclase nativa :

class MyCustomDate extends Date {

  addDays(days) {
    const date = new MyCustomDate(this.valueOf());
    date.setDate(date.getDate() + days);
    return date;
  }
  
}

const today = new MyCustomDate();

const nextWeek = today.addDays(7)

console.log(nextWeek)

De esta manera, si algún día Javascript implementa un addDaysmétodo nativo , no romperá nada.

Creaforge
fuente