Adicionar dias à data do JavaScript

Como adicionar dias à Date atual usando JavaScript. O JavaScript tem uma function incorporada como o AddDay do AddDay ?

Você pode criar um com: –

 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)); 

Resposta Correta :

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

Resposta incorreta :

Essa resposta às vezes fornece o resultado correto, mas muitas vezes retorna o ano e o mês errados. A única ocasião em que essa resposta funciona é quando a data em que você está adicionando dias passa a ter o ano e o mês atuais.

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

Prova / Exemplo

Verifique este JsFiddle

 // Correct function addDays(date, days) { var result = new Date(date); result.setDate(result.getDate() + days); return result; } // Bad Year/Month function addDaysWRONG(date, days) { var result = new Date(); result.setDate(date.getDate() + days); return result; } // Bad during DST function addDaysDstFail(date, days) { var dayms = (days * 24 * 60 * 60 * 1000); return new Date(date.getTime() + dayms); } // TEST function formatDate(date) { return (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear(); } $('tbody tr td:first-child').each(function () { var $in = $(this); var $out = $('').insertAfter($in).addClass("answer"); var $outFail = $('').insertAfter($out); var $outDstFail = $('').insertAfter($outFail); var date = new Date($in.text()); var correctDate = formatDate(addDays(date, 1)); var failDate = formatDate(addDaysWRONG(date, 1)); var failDstDate = formatDate(addDaysDstFail(date, 1)); $out.text(correctDate); $outFail.text(failDate); $outDstFail.text(failDstDate); $outFail.addClass(correctDate == failDate ? "right" : "wrong"); $outDstFail.addClass(correctDate == failDstDate ? "right" : "wrong"); }); 
 body { font-size: 14px; } table { border-collapse:collapse; } table, td, th { border:1px solid black; } td { padding: 2px; } .wrong { color: red; } .right { color: green; } .answer { font-weight: bold; } 
  
DST Dates
Input +1 Day +1 Day Fail +1 Day DST Fail
03/10/2013
11/03/2013
03/09/2014
11/02/2014
03/08/2015
11/01/2015
2013
Input +1 Day +1 Day Fail +1 Day DST Fail
01/01/2013
02/01/2013
03/01/2013
04/01/2013
05/01/2013
06/01/2013
07/01/2013
08/01/2013
09/01/2013
10/01/2013
11/01/2013
12/01/2013
2014
Input +1 Day +1 Day Fail +1 Day DST Fail
01/01/2014
02/01/2014
03/01/2014
04/01/2014
05/01/2014
06/01/2014
07/01/2014
08/01/2014
09/01/2014
10/01/2014
11/01/2014
12/01/2014
2015
Input +1 Day +1 Day Fail +1 Day DST Fail
01/01/2015
02/01/2015
03/01/2015
04/01/2015
05/01/2015
06/01/2015
07/01/2015
08/01/2015
09/01/2015
10/01/2015
11/01/2015
12/01/2015
 var today = new Date(); var tomorrow = new Date(); tomorrow.setDate(today.getDate()+1); 

Tenha cuidado, porque isso pode ser complicado. Ao definir “amanhã”, ele só funciona porque seu valor atual corresponde ao ano e mês de “hoje”. No entanto, a configuração para um número de data como “32” normalmente ainda funcionará muito bem para movê-lo para o próximo mês.

Essas respostas parecem confusas para mim, eu prefiro:

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

getTime () nos fornece milissegundos desde 1970, e 86400000 é o número de milissegundos em um dia. Portanto, ms contém milissegundos para a data desejada.

Usar o construtor de milissegundos fornece o object de data desejado.

Minha solução é:

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

esta solução não tem problemas com o horário de verão. Além disso, pode-se adicionar / sub quaisquer compensações por anos, meses, dias, etc.

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

é o código correto.

Experimentar

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

Usar setDate () para adicionar uma data não resolverá seu problema, tente adicionar alguns dias a um mês de fevereiro, se você tentar adicionar novos dias a ela, ela não resultará no que você esperava.

Há pouco tempo gasto tentando descobrir qual era o acordo com o ano não acrescentando quando seguíamos os principais exemplos abaixo.

Se você quer simplesmente adicionar n dias para a data em que você é melhor, basta ir:

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

ou a versão longwinded

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

Este material de hoje / amanhã é confuso. Ao definir a data atual em sua nova variável de data, você atrapalhará o valor do ano. Se você trabalha a partir da data original, você não vai.

Se você puder, use moment.js . O JavaScript não tem methods de data / hora nativos muito bons. A seguir, um exemplo de syntax do Moment:

 var nextWeek = moment().add(7, 'days'); alert(nextWeek); 
  

Eu criei estas extensões na noite passada:
você pode passar valores positivos ou negativos;

exemplo:

 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; } 
 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: '); document.write(new Date()); document.write('
New: '); document.write(newDate);

A solução mais simples.

  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); 

Obrigado Jason pela sua resposta que funciona como esperado, aqui está uma mistura de seu código e o formato prático de AnthonyWJones:

 Date.prototype.addDays = function(days){ var ms = new Date().getTime() + (86400000 * days); var added = new Date(ms); return added; } 

Tarde para a festa, mas se você usar jQuery então há um excelente plugin chamado Moment:

http://momentjs.com/

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

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

E muitas outras coisas boas lá!

Edit: referência jQuery removido graças ao comentário do aikeru

Velho eu sei, mas às vezes eu gosto disso:

 function addDays(days) { return new Date(Date.now() + 864e5 * days); } 

Os documentos do mozilla para setDate () não indicam que ele lidará com cenários de fim de mês. Veja https://developer.mozilla.org/pt-BR/docs/JavaScript/Reference/Global_Objects/Date

setDate ()

  • Define o dia do mês (1-31) para uma data especificada de acordo com a hora local.

É por isso que uso setTime () quando preciso adicionar dias.

Eu uso algo como:

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

Trabalha com economia de tempo:

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

Trabalha com novo ano:

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

Pode ser parametrizado:

 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); } 

Eu acho que vou dar uma resposta também:
Pessoalmente, gosto de tentar evitar declaração de variables ​​gratuitas, chamadas de método e chamadas de construtor, pois todas elas são caras em termos de desempenho. (dentro da razão, claro)
Eu ia deixar isso como apenas um comentário na resposta dada por @AnthonyWJones, mas pensei melhor.

 // 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; }; 

O acima irá respeitar o horário de verão. Significado se você adicionar um número de dias que cruzam o horário de verão, o tempo exibido (hora) será alterado para refletir isso.
Exemplo:
02 de novembro de 2014 02:00 foi o fim do DST.

 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 

Se você estiver olhando para manter o tempo em DST (então 10:30 ainda será 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; }; 

Então agora você tem …

 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 

Não, o javascript não tem uma function incorporada, mas você pode usar uma linha simples de código

 timeObject.setDate(timeObject.getDate() + countOfDays); 

Eu estou usando a seguinte solução.

 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); 

Data tem um construtor que aceita um int. Esse argumento representa o total de milissegundos antes / depois de 1º de janeiro de 1970. Ele também possui um método setTime que faz o mesmo sem criar um novo object Date.

O que fazemos aqui é converter dias em milissegundos e adicionar esse valor ao valor fornecido por getTime. Finalmente, damos o resultado para o método Date (milissegundos) ou setTime (milissegundos).

Edit: Em vez de setTime() (ou setHours() ) você poderia fazer desta forma:

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

Velho:

Em vez de usar setTime() você pode usar setHours() :

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

Veja o JSFiddle …

Eu tive problemas com o horário de verão com a solução proposta.

Usando getUTCDate / setUTCDate , resolvi meu 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; } 

Código muito simples para adicionar dias em data no script java.

 var d = new Date(); d.setDate(d.getDate() + prompt('how many days you want to add write here')); alert(d); 
  //the_day is 2013-12-31 var the_day = Date.UTC(2013, 11, 31); // Now, the_day will be "1388448000000" in UTC+8; var the_next_day = new Date(the_day + 24 * 60 * 60 * 1000); // Now, the_next_day will be "Wed Jan 01 2014 08:00:00 GMT+0800" 

Para aqueles que usam Angular:

Apenas faça:

 $scope.booking.totTijd.setMinutes($scope.booking.totTijd.getMinutes()+15); $scope.booking.totTijd.setDate($scope.booking.totTijd.getDate() + 1); 

Nossa equipe considera date-fns a melhor biblioteca deste espaço. Ele trata datas como imutáveis (o Moment.js provavelmente nunca adotará a imutabilidade ), é mais rápido e pode ser carregado modularmente.

 const newDate = DateFns.addDays(oldDate, 2); 

Há um setDate e um método getDate , que permitem que você faça algo assim:

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

Se você deseja subtrair um número de dias e formatar sua data em um formato legível, deve considerar criar um object DateHelper personalizado com a DateHelper aparência:

 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)); 

Você pode criar sua function de ajuda personalizada aqui

 function plusToDate(currentDate, unit, howMuch) { var config = { second: 1000, // 1000 miliseconds minute: 60000, hour: 3600000, day: 86400000, week: 604800000, month: 2592000000, // Assuming 30 days in a month year: 31536000000 // Assuming 365 days in year }; var now = new Date(currentDate); return new Date(now + config[unit] * howMuch); } var today = new Date(); var theDayAfterTommorow = plusToDate(today, 'day', 2); 

A propósito, esta é uma solução genérica para adicionar segundos, minutos ou dias, o que você quiser.

 function addDays(n){ var t = new Date(); t.setDate(t.getDate() + n); var month = "0"+(t.getMonth()+1); var date = "0"+t.getDate(); month = month.slice(-2); date = date.slice(-2); var date = date +"/"+month +"/"+t.getFullYear(); alert(date); } addDays(5); 

Você pode usar JavaScript, sem necessidade de 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; 

Eu usei essa abordagem para obter a data certa em uma linha para obter o tempo mais um dia após o que as pessoas estavam dizendo acima.

 ((new Date()).setDate((new Date()).getDate()+1)) 

Eu imaginei que iria construir um normal (new Date()) :

 (new Date()).getDate() > 21 

Usando o código acima, agora posso definir tudo isso dentro de Date() em (new Date()) e ele se comportará normalmente.

 (new Date(((new Date()).setDate((new Date()).getDate()+1)))).getDate() > 22 

ou para obter o object Date :

 (new Date(((new Date()).setDate((new Date()).getDate()+1))))