Preciso incrementar um valor de data em um dia em JavaScript.
Por exemplo, tenho um valor de data 11/09/2010 e preciso armazenar a data do dia seguinte em uma variável JavaScript.
Como posso incrementar uma data por dia?
javascript
date
datetime
Santanu
fonte
fonte
Respostas:
Três opções para você:
1. Usando apenas o
Date
objeto JavaScript (sem bibliotecas):Minha resposta anterior para o número 1 estava errada (foram adicionadas 24 horas, falhando em levar em consideração as transições para o horário de verão; o Clever Human salientou que falharia com 7 de novembro de 2010 no fuso horário do leste). Em vez disso, a resposta de Jigar é a maneira correta de fazer isso sem uma biblioteca:
Isso funciona mesmo no último dia do mês (ou ano), porque o objeto de data do JavaScript é inteligente sobre a rolagem:
Mostrar snippet de código
(No momento, essa resposta é aceita, então não posso excluí-la. Antes de ser aceita, sugeri ao OP que aceitassem o Jigar, mas talvez tenham aceitado essa para os itens 2 ou 3 da lista.)
2. Usando MomentJS :
(Cuidado que
add
modifica a instância em que você a invoca, em vez de retornar uma nova instância, atoday.add(1, 'days')
modificação seriatoday
. É por isso que começamos com uma operação de clonagemvar tomorrow = ...
.)3. Usando o DateJS , mas ele não é atualizado há muito tempo:
fonte
Date
construtor (new Date(year, month, date)
); consulte a seção 15.9.2.1 da especificação ; Se você deseja aceitar uma variedade de formatos, definitivamente dê uma olhada no DateJS .Date.parse
(o que retorna um número de milissegundos que você pode alimentarnew Date(ms)
). Mas cuidado, isso pode variar de navegador para navegador. Até recentemente, as implementações podiam fazer praticamente qualquer coisa que desejassemDate.parse
. A nova especificação da 5ª edição agora tem um formato mínimo que deve ser aceito, mas eu ainda não contaria com isso.x = new Date(); x2 = new Date(x.getTime() + 1000)
, onde 1000 é um incremento de milissegundos.Date
objetos são mutáveis. Você está armazenando o mesmoDate
objeto três vezes na matriz. Se você quiser trêsDate
objetos diferentes , precisará criar três objetos:var unavailableDates = []; for (var d = new Date('2017-05-11'); d < new Date('2017-05-13'); d.setDate(d.getDate() + 1)) { unavailableDates.push(new Date(+d)); }
fonte
new Date("2009-09-11")
mas o Firefox não. Eu acho que a maioria dos navegadores aceita,new Date("2009/09/11")
então uma solução fácil seriavar arrivalDate = document.getElementById('arival_date').value; var dayAfter = new Date(arrival_date.replace(/-/g, '/')); dayAfter.setDate(dayAfter.getDate()+1);
.-
com/
e esperando que os navegadores irá aceitá-lo, seria dividir a string em partes:var dateParts = arrivalDate.split('-'); var y = parseInt(dateParts[0], 10); var m = parseInt(dateParts[1], 10); var d = parseInt(dateParts[2], 10); var dayAfter = new Date(y, m-1, d+1);
Note que estamos usandom-1
aqui, porque meses JavaScript são valores enum (janeiro de ser 0, não 1), ed+1
porque nós 'estão fazendo a incrementação já na tarefa inicial (que vai corrigir automaticamente para 29 de fevereiro, etc.)Nenhum dos exemplos nesta resposta parece funcionar com os dias de ajuste do horário de verão. Naqueles dias, o número de horas em um dia não é 24 (são 23 ou 25, dependendo se você está "avançando" ou "recuando").
A função javascript AddDays abaixo é responsável pelo horário de verão:
Aqui estão os testes que eu usei para testar a função:
fonte
A maneira mais fácil é converter para milissegundos e adicionar 1000 * 60 * 60 * 24 milissegundos, por exemplo:
fonte
1000*60*60*24
xDaysToBeAdded
new Date(+new Date() + 1000*60*60*24)
mas na verdade é semelhante agetTime()
/setTime()
, realmente.new Date(Date.now()+1000*60*60*24);
Amanhã em uma linha em JS puro, mas é feio !
Aqui está o resultado:
fonte
Você primeiro precisa analisar sua string antes de seguir a sugestão de outras pessoas:
Se você deseja voltar no mesmo formato novamente, precisará fazer isso "manualmente":
Mas sugiro que você obtenha o Date.js, como mencionado em outras respostas, que o ajudará muito .
fonte
Eu sinto que nada é mais seguro do que
.getTime()
e.setTime()
, portanto, esse deve ser o melhor e o desempenho também..setDate()
para Data inválida (como 31 + 1) é muito perigoso e depende da implementação do navegador.fonte
Nos próximos 5 dias:
fonte
Dois métodos:
1:
2: Semelhante ao método anterior
fonte
Obtenha o valor da string da data usando o método dateObj.toJSON (). Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON Fatie a data do retorno valor e, em seguida, incremente pelo número de dias que você deseja.
fonte
Exemplo
Resultado
fonte
Não tenho certeza absoluta se é um BUG (Firefox testado 32.0.3 e Chrome 38.0.2125.101), mas o código a seguir falhará no Brasil (-3 GMT):
Resultado:
Adicionar uma hora à data fará com que funcione perfeitamente (mas não resolve o problema).
Resultado:
fonte
Resultados em uma representação de seqüência de caracteres da data de amanhã. Use new Date () para obter a data de hoje, adicionando um dia usando Date.getDate () e Date.setDate () e convertendo o objeto Date em uma string.
fonte
Incrementando o ano da data com vanilla js:
Apenas no caso de alguém querer incrementar outro valor além da data (dia)
fonte
Via JS nativo, para adicionar um dia, você pode fazer o seguinte:
Outra opção é usar a
moment
biblioteca:fonte
Incremento de data com reconhecimento de fuso horário / horário de verão para datas JavaScript:
fonte