Adicionar dias à data do JavaScript

1097

Como adicionar dias aos atuais Dateusando JavaScript. O JavaScript possui uma função incorporada como a .Net AddDay?

Ashesh
fonte

Respostas:

1212

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

Isso cuida de incrementar automaticamente o mês, se necessário. Por exemplo:

31/8 + 1 dia se tornará 9/1 .

O problema de usar setDatediretamente é que é um mutador e é melhor evitar esse tipo de coisa. A ECMA considerou adequado tratar Datecomo uma classe mutável e não como uma estrutura imutável.

AnthonyWJones
fonte
17
Simplificado:Date.prototype.addDays=function(d){return new Date(this.valueOf()+864E5*d);};
Duncan
27
@ Duncan Tem certeza de que é o mesmo que acima? Este simplesmente adiciona 24 horas, mas um dia nem sempre é 24 horas . Acho que a pergunta é como incrementar a parte da data em 1 dia, sem alterar a parte da hora.
Tamás Bolvári
88
864E5por algum motivo eu prefiro escrever 24*60*60no meu código :)
Mars Robertson
62
Pessoal, não use o método de adicionar 864E5 porque isso não leva a diferença de horário de verão, onde os dias podem ser de 23 ou 25 horas.
Sbrbot
12
Para aqueles de vocês preocupados com o horário de verão - não. Esses algoritmos alteram a data subjacente, não como a data é interpretada. O horário de verão é implementado nos getters e setters da data - os getters para subtrair uma hora no verão e o setter para adicionar essa hora de volta durante o verão para normalizar o horário. Mas somente ao usar uma hora absoluta - as horas relativas não precisam ser interpretadas. É por isso que a matemática da data funciona. IMHO ...
Gerard ONeill
755

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 incorretos. A única vez que essa resposta funciona é quando a data em que você está adicionando os dias tem 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

sparebytes
fonte
@ BZLM, Sim essencialmente o mesmo. Apenas não modifica o protótipo de data. Eu também queria apontar as falhas na resposta principal.
Sparebytes 30/10/2013
A resposta aceita foi editada quinze dias atrás para apontar suas falhas. Você acha que precisa de mais edição? Se sim, como?
bzlm
7
@ bzlm: Sim, acredito que a nota deve ler "essa abordagem falhará se a data 'de' não estiver no mesmo ano ou mês da data atual ". Ainda me preocupo com o fato de os usuários olharem a resposta e não lerem o aviso, pois ele não se destaca. Obrigado.
Sparebytes 30/10/2013
3
Eu acho que, mesmo que este trabalho não esteja correto. Não existe esse construtor para Data: var resultado = nova Data (data); , consulte http://www.w3schools.com/js/js_dates.asp . Mesmo que isso geralmente funcione, às vezes pode levar a resultados errados devido à conversão em string e vice-versa. Deve ser var result = new Date (date.getTime ());
Marcin
2
@AnkitBalyan, Veja outras respostas. Pode não funcionar corretamente devido ao horário de verão
sparebytes
188
var today = new Date();
var tomorrow = new Date();
tomorrow.setDate(today.getDate()+1);

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

Joel Coehoorn
fonte
1
Sim? Mas o que é isso? (publicado em 31 de março de 2010): today = new Date (); amanhã = nova data (); tomorrow.setDate (today.getDate () + 1); alerta (tomorrow.getMonth ()); Diz "3". alerta (amanhã); está correto ... Por quê ???
precisa
12
O mês @sims é 0 indexado. O mês 3 é abril
Joel Coehoorn 31/03
7
Por que a necessidade de criar 2 objetos de data separados? Por que não usar simplesmente o mesmo objeto de data var d = new Date(); d.setDate( d.getDate() + 1 );:?
Joseph Silber
8
Essa abordagem não funciona ao longo dos anos. Se a sua data de início for de alguns anos atrás, getDate()retornará o dia desse ano . Em seguida, a chamada setDatedefine o dia no ano atual . Por isso, é não uma solução geral bom. A resposta de @ AnthonyWJones realmente funciona corretamente.
de Drew Noakes
3
@ DrewNoakes - sua afirmação de que não funciona ao longo dos anos está errada. getDate retorna o dia do mês, não o "dia do ano". Por exemplo, var d = new Date(2015,11,30);d.setDate(d.getDate() + 370)dá 3 de janeiro de 2017, que cruza 2 anos.
RobG
124

Minha solução simples é:

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 / subtrair qualquer deslocamento por anos, meses, dias etc.

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

é o código correto.

sbrbot
fonte
13
Nota: Isso redefine tempo como 00:00:00 (pode ser um problema ou não)
Álvaro González
Não funciona no último dia de qualquer mês, como você diz. Torna isso inutilizável em 12 dias do ano. Parece um pesadelo para depurar !!!
de Drew Noakes
6
No Drew, é utilizável por todos os dias do ano. Você pode colocar o deslocamento da data maior que 31 ou o deslocamento mensal maior que 12 e esta função o recalcula como dia no próximo mês ou mês no próximo ano. Por exemplo: nextday = new Date (oldDate.getFullYear (), oldDate.getMonth (), oldDate.getDate () + 40); é perfeitamente bem código.
Sbrbot
há getMonth () + 22 - o que você acha que vai funcionar !?
Sbrbot
1
Eu concordo, use desta maneira. Acabamos de ter um bug por causa do horário de verão porque estávamos usando setDate.
Jelle
95

Essas respostas me parecem confusas, eu prefiro:

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

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

O uso do construtor de milissegundos fornece o objeto de data desejado.

Jason
fonte
46
Esta solução não leva em consideração o horário de verão. Assim, por exemplo, isso retornará a mesma data, 23 horas depois: new Date(new Date('11/4/2012').getTime() + 86400000)
Noah Harrison
6
@NoahMiller O problema que você levantou pode ser um recurso, não um bug! Às vezes, adicionar 24 horas por dia é a coisa certa a fazer, com o objetivo de saber o tempo resultante com base no horário de verão. A data em que seu exemplo retorna tem um valor de horário das 23h em 4 de novembro, que é o que são 24 horas depois naquele dia em particular. O pôster original perguntou sobre data e hora, o que parece indicar algum desejo de horas corretas do dia. Esta resposta está correta se você estiver no caso em que sua meta é o tempo 24 horas depois.
Andy Novocin
3
Concordo Noah, var d2 = nova data (d1.valueOf () + 24 * 60 * 60 * 1000) faz o que diz, adiciona um dia inteiro de ticks a uma data.
Corey Alix
6
Isso é absolutamente correto para alguns casos (por exemplo, cookies de 1 dia) e uma solução mais simples que a maioria dos outros. Eu não entendo por que tem tantos downvotes e tão poucos upvotes: /
Matmarbon
48

Tentar

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

O uso de 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, isso não resultará no que você esperava.

sufyan.shoaib
fonte
26
Não, isso não deve ser marcado como a resposta correta, pois esta solução pressupõe que todos os dias tenham 24 * 60 * 60 * 1000 segundos, mas não (horário de verão)!
Sbrbot
Alguma evidência sobre o problema de 'Feb' com setDate()? É isso: stackoverflow.com/questions/5497637/…
nobar
9
+1 Isto DEVE ser marcado como a resposta correta. Acredito que "horário de verão" é sobre apresentação e não sobre valor , que é apenas o número de milissegundos. Do ponto de vista do valor - dia é o número CONST de milissegundos, enquanto em termos de apresentação pode variar.
Disfated 17/03/15
1
@ desatualizado - essa não é a resposta correta. O dia que sai do horário de verão tem 25 horas, mas esse método adiciona apenas 24, portanto a data será a mesma. Usar 24 horas para representar um dia funciona se os métodos UTC forem usados, mas por que se preocupar em usar setDate é mais conveniente? ;-)
RobG
38

Passei anos tentando descobrir qual era o acordo que o ano não adicionava ao seguir os exemplos de liderança abaixo.

Se você quiser simplesmente adicionar n dias à data em que você tem, é melhor apenas ir:

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

ou a versão de vento longo

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

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

Rumpleteaser
fonte
7
Lendo todas as respostas até encontrar essa joia aqui. Agora isso faz sentido. Surpreendente que a coisa de hoje / amanhã tenha sido copiada em quase todas as respostas, quando não faz sentido algum e não é "de legibilidade e clareza", como o autor diz na resposta mais votada - no comentário mais votado -, é confuso e uma prática ruim e errado
Cesc
23

Se você puder, use moment.js . O JavaScript não possui métodos de data / hora nativos muito bons. A seguir, é apresentado um exemplo da sintaxe do momento:

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>

Referência: http://momentjs.com/docs/#/manipulating/add/

user2910265
fonte
1
@ kpull1 o solicitante não restringiu o domínio da solução, perguntando se existe uma solução interna.
user2910265
4
Nota moderna: Moment.js é incrivelmente pesado para adicionar a um propósito tão pequeno. Tem várias centenas de KB e não é compatível com o webpack pronto para uso.
Joshua Comeau
1
Nossa biblioteca preferida é date-fns. Fácil de usar na Web, rápido e trata as Datas como imutáveis.
Freewalker
1
@LukeWilliams nunca ouviu falar em data-fns até agora. vai dar uma olhada. obrigado.
user2910265
2
@JoshuaComeau Se você fizer o download em cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.3/moment.min.js , ele ocupará 53.248 bytes no disco. Imagino que seja a bola de cera, mas não sei. Enfim, tanto faz. Não é grande coisa.
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);

Sarja
fonte
2
Voto positivo por não exigir uma variável de data intermediária.
Jeff Lowery
esta é a melhor resposta, porque ele não tem a mutação
knocte
Nem todo dia tem 24h, ele falha no horário de verão e pula segundos.
24517 Stephan
19

Eu criei essas 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;
}
mark.nino.chua
fonte
7
O método .addDays () não funciona para datas que ultrapassam os limites do horário de verão.
mskfisher
1
Essa é uma das melhores respostas aqui, porque você (corretamente) usa o número de milissegundos desde o epoc para representar datas / horas e adiciona milisegundos para ajustes ... Por que você não manteve isso por "addMonths"! ? E por que não adicionar ano? Você ficou entediado?
23615 Robin
Além de meses, os períodos podem ser representados por números estáticos. Mas os meses podem ter quatro comprimentos diferentes. Além disso, qualquer período de dias a partir de Dias ou mais pode ter duração variável no horário de verão, portanto, você não pode mais usar a adição baseada em tempo sem outro nível de complexidade. Eu adicionei o addYears () e corrigi o addMonths ().
Suamere
14

Sem usar a segunda variável, você pode substituir 7 pelos seus próximos x dias:

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

para subtrair 30 dias de uso (24h = 86400000ms)

new Date(+yourDate - 30 *86400000)

Kamil Kiełczewski
fonte
Ao tentar calcular a data e hora, lembre-se sempre dessa data com base em milissegundos em ciência da computação, ( en.wikipedia.org/wiki/System_time#Retrieving_system_time ) new Date (+ suaData + 30 * (24 * 60 * 60 * 1000))
Ashraf Abusada
13

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

ampolas
fonte
Eu acho que essa é a melhor solução. Se estamos estendendo a classe Date, faz mais sentido que a instância Date seja ela mesma atualizada.
Porlune
10

Obrigado Jason pela resposta que funciona conforme o esperado, eis uma mistura do seu código e do prático formato de AnthonyWJones:

Date.prototype.addDays = function(days){
    var ms = new Date().getTime() + (86400000 * days);
    var added = new Date(ms);
    return added;
}
Olivier
fonte
6
Ele não leva em consideração o horário de verão quando há mais ou menos de 86400000 segundos em um dia e pode resultar em erro lógico (bug do programa) no seu código.
Sbrbot
Às vezes isso é necessário. A API do eBay possui leilões de dia x com base em 24 horas, para que seu item termine em um horário diferente do que sobe se o status do horário de verão mudar no meio do leilão. Nesse caso, você precisa usar esse tipo de função para evitar erros lógicos.
Andy Novocin
10

Tarde para a festa, mas se você usar jQuery, existe 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 do jQuery removida graças ao comentário de aikeru

RemarkLima
fonte
1
momento não precisa jQuery :)
aikeru
Ainda melhor nesse caso !!
RemarkLima
1
Sim, depois de brincar com o Plain ol 'JS por muito tempo, usei o Moment e ele funciona (tm)!
precisa saber é o seguinte
Por que você deseja usar o plug-in quando algumas linhas de JS funcionam?
frenchie
@frenchie porque, o que começa com algumas linhas de JS e porque claramente seu aplicativo está manipulando informações relacionadas a dias, datas e horas, em breve serão poucas mil linhas de JS, e você será solicitado a localizar o aplicativo 12 idiomas e fusos horários e você desejou que você tinha começado com algo como momento;)
RemarkLima
10

Uma solução projetada para o operador de tubulação :

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

Se você precisar de mais funcionalidades, sugiro consultar a biblioteca date-fns .

sdgfsdh
fonte
8

Velho eu sei, mas às vezes gosto disso:

function addDays(days) {
    return new Date(Date.now() + 864e5 * days);
}
Todd
fonte
2
Este faz mais sentido para mim. É simples, elegante e não se restringe a problemas que ocorrem ao longo de meses / anos.
Uadrive 7/15
1
Resposta mais simples apresentada. Com base nisso, o protótipo 'addDays' seria o seguinte:Date.prototype.addDays = function(days) {return new Date(this.getTime() + (864e5 * days));};
CrazyIvan1974 3/15
Nem todo dia tem 24h, ele falha no horário de verão e pula segundos.
24417 Stephan
8

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

Usando getUTCDate/ em setUTCDatevez disso, 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;
}
Joshua Comeau
fonte
8

Você pode usar JavaScript, não é necessário 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
fonte
8

Protótipo genérico sem variáveis, aplica-se a um valor de Data existente:

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

Os documentos do mozilla para setDate () não indicam que ele manipulará cenários de final de mês. Consulte https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date

setDate ()

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

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

Blake Mills
fonte
Gostaria de vincular os documentos do ECMAScript, mas eles são liberados em PDF; (
Blake Mills
1
Os " documentos do mozilla para setDate () não indicam que ele lidará com cenários de final de mês ". Os "documentos" foram atualizados e agora são atualizados. ;-)
RobG
7

Tão simples como isto:

new Date((new Date()).getTime() + (60*60*24*1000));
Dila Gurung
fonte
2
Embora isso adicione dias UTC, ele usa métodos locais e não permite dias locais que não duram 24 horas, o que acontece quando o deslocamento do fuso horário é alterado (por exemplo, dentro e fora do horário de verão).
RobG 22/08/19
6

Acho que vou dar uma resposta também:
Pessoalmente, gosto de tentar evitar declarações variáveis ​​gratuitas, chamadas de método e chamadas de construtor, pois elas são caras no desempenho. (dentro da razão, é claro),
eu deixaria 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. Ou seja, se você adicionar um número de dias que cruzam o horário de verão, o tempo (hora) exibido será alterado para refletir isso.
Exemplo:
2 de novembro de 2014 às 02:00 era o fim do horário de verão.

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ê deseja manter o tempo no horário de verão (as 10:30 ainda serão 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
Duncan
fonte
6

Não, o javascript não possui uma função integrada, mas você pode usar uma linha de código simples

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

Eu uso algo como:

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

Funciona com horário de verão:

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

Funciona com o ano novo:

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);
}
kpull1
fonte
4

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

Date 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 objeto Date.

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

Vakhtang
fonte
Nem todo dia tem 24h, ele falha no horário de verão e pula segundos.
24517 Stephan
Stephan, alguma outra biblioteca explica isso?
Vakhtang
now.setDate(now.getDate() + days);lida automaticamente com as alterações do horário de verão. E eu tenho que corrigir, os segundos bissextos são ignorados nos carimbos de data e hora do JS.
25417 Stephan
4

Edit: Em vez de setTime()(ou setHours()), você poderia fazê-lo desta maneira:

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 ...

spaark
fonte
seguindo essa lógica, você também pode adicionar um dia;)d.setDate(d.getDate() + 1);
Rivenfall
4

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

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

Rana Aalamgeer
fonte
4

Há um método setDate e getDate , que permitem fazer algo assim:

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

Se você deseja subtrair vários dias e formatar sua data em um formato legível por humanos, considere criar um DateHelperobjeto personalizado parecido com este:

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

(veja também este violino )

John Slegers
fonte
4

A extensão do protótipo em javascript pode não ser uma boa ideia , especialmente em bases de código profissionais.

O que você quer fazer é estender a Dateclasse 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)

Dessa forma, se um dia o Javascript implementar um addDaysmétodo nativo , você não quebrará nada.

Creaforge
fonte