Adicione 10 segundos a uma data

253

Como posso adicionar 10 segundos a um objeto de data JavaScript?

Algo assim:

var timeObject = new Date()     
var seconds = timeObject.getSeconds() + 10;
timeObject = timeObject + seconds;
George
fonte
4
Ou se você quiser fazê-lo através do construtor - new Date (. New Date () getTime () + 10000)
John Strickler

Respostas:

416

Há um setSecondsmétodo também:

var t = new Date();
t.setSeconds(t.getSeconds() + 10);

Para obter uma lista das outras Date funções, consulte o MDN.


setSeconds manipulará corretamente os casos envolventes:

var d;
d = new Date('2014-01-01 10:11:55');
alert(d.getMinutes() + ':' + d.getSeconds()); //11:55
d.setSeconds(d.getSeconds() + 10);
alert(d.getMinutes() + ':0' + d.getSeconds()); //12:05

zzzzBov
fonte
3
Cuidado, minha instalação do Nodejs retorna d.getSeconds () como uma string. Eu tive que mudar isso para (+ d.getSeconds ()) O unary plus converte uma string em um número. Talvez um pouco mais óbvia seria 1 * d.getSeconds ()
tqwhite
1
@tqwhite, typeof new Date().getSeconds()retorna 'number'no nó, então acho que você pode ter outros problemas (a menos que você esteja em uma versão desatualizada do nó ou algo assim).
zzzzBov
2
Tente fazer d.setSeconds(d.getSeconds() - 92);e você terminará com 2'32 "de diferença em vez de 1'32". A solução com new Date(d.getTime() - 92*1000);funciona no entanto!
Rafalon
1
Confiar em comportamentos não documentados (que setSeconds (70) aumentará minutos em um e definir segundos para 10) parece uma prática geralmente ruim. As respostas (atualmente próximas) apontando para Date.getTime () + <número de milissegundos a adicionar> parecem ser a abordagem pretendida e suportada, e seriam claras para a maioria dos programadores vindos de diferentes idiomas, sem conhecimento enciclopédico das nuances não documentadas de cada mecanismo JavaScript específico.
quer
1
Pode ocorrer um problema com fusos horários históricos; consulte os comentários abaixo da resposta de @ Ron: stackoverflow.com/a/17267937/198797 . Possivelmente não é um cenário comum, mas mesmo assim um problema.
tsemer 4/01/18
110
// let timeObject = new Date();
// let seconds = 10 * 1000; // 10000 milliseconds
timeObject = new Date(timeObject.getTime() + seconds);
4esn0k
fonte
33
... ea razão você adicionou 10000 é porque datas Javascript trabalhar em milissegundos, ou seja, 10000 = 10 * 1000
psiphi75
1
E o + antes de timeObject é necessário porque lança timeObject para um número. Assim é como timeObject.getTime () na resposta de Ron
James
1
JavaScript é tão desagradável. Essas APIs iniciais estão um pouco erradas.
usr
62

Apenas pelos maníacos de desempenho entre nós.

consiga tempo

var d = new Date('2014-01-01 10:11:55');
d = new Date(d.getTime() + 10000);

5.196.949 Ops / s, mais rápido


setSeconds

var d = new Date('2014-01-01 10:11:55');
d.setSeconds(d.getSeconds() + 10);

2.936.604 Ops / s, 43% mais lento


moment.js

var d = new moment('2014-01-01 10:11:55');
d = d.add(10, 'seconds');

22.549 Ops / s, 100% mais lento


Talvez seja a menos legível por humanos (não tão ruim), mas a maneira mais rápida de ir :)

testes online jspref

Danpe
fonte
3
Graças para os detalhes, muito útil :)
Dean
58
const timeObject = new Date(); 
timeObject = new Date(timeObject.getTime() + 1000 * 10);
console.log(timeObject);

Consulte também: Como adicionar 30 minutos a um objeto Data JavaScript?

Ron
fonte
7
de todas as respostas erradas aqui, esta é a correta.
Cory Mawhorter
Sim, esta é a resposta correta. Infelizmente, o Google está se referindo a esta pergunta se procurar por "data do javascript adicionar segundos" e a resposta mais votada estiver errada.
Philipp Gächter
2
Alguém pode explicar o que a resposta selecionada (atualmente em @zzzzBov) está fazendo de errado? Funciona para mim.
21416 tsemer
1
@tsemer, à primeira vista, pensei que a resposta do zzzzBov não estava certa, porque não achei que atualizaria o valor minuto se estiver fora do intervalo. Mas por causa do seu "desafio", revi o MDN e confirmei que a resposta está definitivamente certa. :)
Ron
1
@tsemer Tente em um navegador Web com suporte histórico TimeZones (Internet Explorer 11, por exemplo): Também definir o seu fuso horário sistema para "Ásia / Yekaterinburg":var timestamp = Date.parse("2011-03-26T20:59:59.999Z"); var d = new Date(timestamp); d.setSeconds(d.getSeconds() + 10); console.log(d.getTime() - timestamp);
4esn0k
9

Tente isto

a = new Date();
a.setSeconds(a.getSeconds() + 10);
lostyzd
fonte
4
timeObject.setSeconds(timeObject.getSeconds() + 10)
Tomasz Nurkiewicz
fonte
4

Eu tenho algumas novas variantes

  1. var t = new Date(Date.now() + 10000);
  2. var t = new Date(+new Date() + 10000);
1nstinct
fonte
2

O Date()objeto em javascript não é tão inteligente assim.

Se você apenas se concentrar em adicionar segundos, parece lidar com as coisas sem problemas, mas se você tentar adicionar um número X de segundos, adicione um número X de minutos e horas, etc., ao mesmo Dateobjeto que você terá problemas. Então, simplesmente voltei a usar apenas o setSeconds()método e a converter meus dados em segundos (o que funcionou bem).

Se alguém puder demonstrar a adição de tempo a um Date()objeto global usando todos os métodos definidos e a hora final sair corretamente, eu gostaria de vê-lo, mas tenho a sensação de que um método definido deve ser usado por vez em um determinado Date()objeto e misturá-los leva a uma bagunça.

var vTime = new Date();

var iSecondsToAdd = ( iSeconds + (iMinutes * 60) + (iHours * 3600) + (iDays * 86400) );

vTime.setSeconds(iSecondsToAdd);

Aqui está mais uma documentação que pode ajudar :

coding_is_fun
fonte
2
  1. você pode usar o setSecondsmétodo obtendo segundos a partir de hoje e adicionando apenas 10 segundos

    var today = new Date();
    today.setSeconds(today.getSeconds() + 10);
  2. Você pode adicionar 10 * 1000 milissegundos à nova data:

    var today = new Date(); 
    today = new Date(today.getTime() + 1000*10);
  3. Você pode usar setTime:

    today.setTime(now.getTime() + 10000)
Javed IN
fonte
1

Tente assim.

Date.prototype.addSeconds = function(seconds) {
  var copiedDate = new Date(this.getTime());
  return new Date(copiedDate.getTime() + seconds * 1000);
}

Basta ligar e atribuir new Date().addSeconds(10)

Ikram - Ud - Daula
fonte