Adicionar dias à data do JavaScript


1097

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

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.


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


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


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.


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.


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.


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


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/


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


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

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

14

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

new Date(+yourDate - 30 *86400000)


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


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

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


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 .


8

Velho eu sei, mas às vezes gosto disso:

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

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

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;

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

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.


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

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

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

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

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


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


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


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 )


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.