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?
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?
Respostas:
Três opções para você:
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:
var tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);
Isso funciona mesmo no último dia do mês (ou ano), porque o objeto de data do JavaScript é inteligente sobre a rolagem:
(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.)
var today = moment();
var tomorrow = moment(today).add(1, 'days');
(Cuidado que add
modifica a instância em que você a invoca, em vez de retornar uma nova instância, a today.add(1, 'days')
modificação seria today
. É por isso que começamos com uma operação de clonagem var tomorrow = ...
.)
var today = new Date(); // Or Date.today()
var tomorrow = today.add(1).day();
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 alimentar new Date(ms)
). Mas cuidado, isso pode variar de navegador para navegador. Até recentemente, as implementações podiam fazer praticamente qualquer coisa que desejassem Date.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 mesmo Date
objeto três vezes na matriz. Se você quiser três Date
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)); }
var myDate = new Date();
//add a day to the date
myDate.setDate(myDate.getDate() + 1);
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 seria var 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 usando m-1
aqui, porque meses JavaScript são valores enum (janeiro de ser 0, não 1), e d+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:
function addDays(date, amount) {
var tzOff = date.getTimezoneOffset() * 60 * 1000,
t = date.getTime(),
d = new Date(),
tzOff2;
t += (1000 * 60 * 60 * 24) * amount;
d.setTime(t);
tzOff2 = d.getTimezoneOffset() * 60 * 1000;
if (tzOff != tzOff2) {
var diff = tzOff2 - tzOff;
t += diff;
d.setTime(t);
}
return d;
}
Aqui estão os testes que eu usei para testar a função:
var d = new Date(2010,10,7);
var d2 = AddDays(d, 1);
document.write(d.toString() + "<br />" + d2.toString());
d = new Date(2010,10,8);
d2 = AddDays(d, -1)
document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString());
d = new Date('Sun Mar 27 2011 01:59:00 GMT+0100 (CET)');
d2 = AddDays(d, 1)
document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString());
d = new Date('Sun Mar 28 2011 01:59:00 GMT+0100 (CET)');
d2 = AddDays(d, -1)
document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString());
A maneira mais fácil é converter para milissegundos e adicionar 1000 * 60 * 60 * 24 milissegundos, por exemplo:
var tomorrow = new Date(today.getTime()+1000*60*60*24);
1000*60*60*24
xDaysToBeAdded
new Date(+new Date() + 1000*60*60*24)
mas na verdade é semelhante a getTime()
/ setTime()
, realmente.
new Date(Date.now()+1000*60*60*24);
Você primeiro precisa analisar sua string antes de seguir a sugestão de outras pessoas:
var dateString = "2010-09-11";
var myDate = new Date(dateString);
//add a day to the date
myDate.setDate(myDate.getDate() + 1);
Se você deseja voltar no mesmo formato novamente, precisará fazer isso "manualmente":
var y = myDate.getFullYear(),
m = myDate.getMonth() + 1, // january is month 0 in javascript
d = myDate.getDate();
var pad = function(val) { var str = val.toString(); return (str.length < 2) ? "0" + str : str};
dateString = [y, pad(m), pad(d)].join("-");
Mas sugiro que você obtenha o Date.js, como mencionado em outras respostas, que o ajudará muito .
Eu sinto que nada é mais seguro do que .getTime()
e .setTime()
, portanto, esse deve ser o melhor e o desempenho também.
const d = new Date()
console.log(d.setTime(d.getTime() + 1000 * 60 * 60 * 24)) // MILLISECONDS
.setDate()
para Data inválida (como 31 + 1) é muito perigoso e depende da implementação do navegador.
Nos próximos 5 dias:
var date = new Date(),
d = date.getDate(),
m = date.getMonth(),
y = date.getFullYear();
for(i=0; i < 5; i++){
var curdate = new Date(y, m, d+i)
console.log(curdate)
}
Dois métodos:
1:
var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setTime(a.getTime() + no_of_days * 86400000)
2: Semelhante ao método anterior
var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setDate(a.getDate() + no_of_days)
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.
var currentdate = new Date();
currentdate.setDate(currentdate.getDate() + 1);
var tomorrow = currentdate.toJSON().slice(0,10);
Date.prototype.AddDays = function (days) {
days = parseInt(days, 10);
return new Date(this.valueOf() + 1000 * 60 * 60 * 24 * days);
}
Exemplo
var dt = new Date();
console.log(dt.AddDays(-30));
console.log(dt.AddDays(-10));
console.log(dt.AddDays(-1));
console.log(dt.AddDays(0));
console.log(dt.AddDays(1));
console.log(dt.AddDays(10));
console.log(dt.AddDays(30));
Resultado
2017-09-03T15:01:37.213Z
2017-09-23T15:01:37.213Z
2017-10-02T15:01:37.213Z
2017-10-03T15:01:37.213Z
2017-10-04T15:01:37.213Z
2017-10-13T15:01:37.213Z
2017-11-02T15:01:37.213Z
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):
Date.prototype.shiftDays = function(days){
days = parseInt(days, 10);
this.setDate(this.getDate() + days);
return this;
}
$date = new Date(2014, 9, 16,0,1,1);
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
Resultado:
Fri Oct 17 2014 00:01:01 GMT-0300
Sat Oct 18 2014 00:01:01 GMT-0300
Sat Oct 18 2014 23:01:01 GMT-0300
Sun Oct 19 2014 23:01:01 GMT-0200
Adicionar uma hora à data fará com que funcione perfeitamente (mas não resolve o problema).
$date = new Date(2014, 9, 16,0,1,1);
Resultado:
Fri Oct 17 2014 01:01:01 GMT-0300
Sat Oct 18 2014 01:01:01 GMT-0300
Sun Oct 19 2014 01:01:01 GMT-0200
Mon Oct 20 2014 01:01:01 GMT-0200
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.
const tomorrow = () => {
let t = new Date();
t.setDate(t.getDate() + 1);
return `${t.getFullYear()}-${String(t.getMonth() + 1).padStart(2, '0')}-${String(
t.getDate()
).padStart(2, '0')}`;
};
tomorrow();
Incrementando o ano da data com vanilla js:
start_date_value = "01/01/2019"
var next_year = new Date(start_date_value);
next_year.setYear(next_year.getYear() + 1);
console.log(next_year.getYear()); //=> 2020
Apenas no caso de alguém querer incrementar outro valor além da data (dia)
Via JS nativo, para adicionar um dia, você pode fazer o seguinte:
let date = new Date(); // today
date.setDate(date.getDate() + 1) // tomorrow
Outra opção é usar a moment
biblioteca:
const date = moment().add(14, "days").toDate()
Incremento de data com reconhecimento de fuso horário / horário de verão para datas JavaScript:
function nextDay(date) {
const sign = v => (v < 0 ? -1 : +1);
const result = new Date(date.getTime());
result.setDate(result.getDate() + 1);
const offset = result.getTimezoneOffset();
return new Date(result.getTime() + sign(offset) * offset * 60 * 1000);
}