Agregar 10 segundos a una fecha

253

¿Cómo puedo agregar 10 segundos a un objeto de fecha JavaScript?

Algo como esto:

var timeObject = new Date()     
var seconds = timeObject.getSeconds() + 10;
timeObject = timeObject + seconds;
Jorge
fuente
44
O si desea hacerlo a través del constructor - nueva Fecha (nueva Fecha (). GetTime () + 10000)
John Strickler

Respuestas:

416

También hay un setSecondsmétodo:

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

Para obtener una lista de las otras Date funciones, debe consultar MDN


setSeconds manejará correctamente los 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
fuente
3
Cuidado, mi instalación de Nodejs devuelve d.getSeconds () como una cadena. Tuve que cambiar esto a (+ d.getSeconds ()) El unario más convierte una cadena en un número. Quizás un poco más obvio sería 1 * d.getSeconds ()
tqwhite
1
@tqwhite, typeof new Date().getSeconds()regresa 'number'en el nodo, por lo que creo que puede tener otros problemas (a menos que esté en una versión desactualizada del nodo o algo así).
zzzzBov
2
Intenta hacerlo d.setSeconds(d.getSeconds() - 92);y terminarás con una diferencia de 2'32 "en lugar de 1'32". new Date(d.getTime() - 92*1000);¡Sin embargo, la solución funciona!
Rafalon
1
Confiar en el comportamiento indocumentado (que setSeconds (70) incrementará los minutos en uno y establecerá los segundos en 10) parece una práctica generalmente mala. Las (actualmente siguientes) respuestas que apuntan a Date.getTime () + <número de milisegundos para agregar> parecen ser el enfoque previsto y compatible, y sería claro para la mayoría de los programadores que provienen de diferentes idiomas sin conocimiento enciclopédico de los matices indocumentados de cada motor de JavaScript particular.
Tom Dibble
1
Podría ocurrir un problema con las zonas horarias históricas, vea los comentarios debajo de la respuesta de @ Ron: stackoverflow.com/a/17267937/198797 . Posiblemente no es un escenario común pero es un problema.
tsemer
110
// let timeObject = new Date();
// let seconds = 10 * 1000; // 10000 milliseconds
timeObject = new Date(timeObject.getTime() + seconds);
4esn0k
fuente
33
... y la razón por la que agregó 10000 es porque las fechas de Javascript funcionan en milisegundos, es decir, 10000 = 10 * 1000
psiphi75
1
Y se necesita el + before timeObject porque convierte timeObject en un número. Así que es como timeObject.getTime () en la respuesta de Ron
James
1
JavaScript es muy desagradable. Estas primeras API están un poco jodidas.
Usr
62

Solo por los maniacos de rendimiento entre nosotros.

consigue tiempo

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

5,196,949 Ops / seg, el más rápido


setSeconds

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

2,936,604 Ops / sec, 43% más lento


moment.js

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

22,549 Ops / sec, 100% más lento


Entonces, tal vez sea la menos legible para los humanos (no está tan mal) pero la forma más rápida de ir :)

Pruebas en línea de jspref

Danpe
fuente
3
Gracias por los detalles, muy útil :)
Dean
58
const timeObject = new Date(); 
timeObject = new Date(timeObject.getTime() + 1000 * 10);
console.log(timeObject);

Consulte también: ¿Cómo agregar 30 minutos a un objeto Fecha de JavaScript?

Ron
fuente
77
de todas las respuestas incorrectas aquí, esta es la correcta.
Cory Mawhorter
Sí, esta es la respuesta correcta. Lamentablemente, Google se está refiriendo a esta pregunta si busca "javascript date add segundos" y la respuesta más votada es incorrecta.
Philipp Gächter
2
¿Alguien puede explicar qué está haciendo mal la respuesta seleccionada (actualmente de @zzzzBov)? Esto funciona para mi.
tsemer
1
@tsemer, a primera vista, pensé que la respuesta de zzzzBov no era correcta, porque no pensé que actualizaría el valor de los minutos si está fuera del rango. Pero debido a su "desafío", revisé el MDN y confirmó que la respuesta es definitivamente correcta. :)
Ron
1
@tsemer Pruebe en un navegador web con soporte de zonas horarias históricas (Internet Explorer 11, por ejemplo): también configure la zona horaria de su sistema en "Asia / Ekaterimburgo":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

Prueba esto

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

Tengo un par de nuevas variantes

  1. var t = new Date(Date.now() + 10000);
  2. var t = new Date(+new Date() + 10000);
1 instinto
fuente
2

El Date()objeto en javascript no es tan inteligente realmente.

Si solo te enfocas en agregar segundos, parece manejar las cosas sin problemas, pero si intentas agregar X número de segundos, entonces agrega X número de minutos y horas, etc., al mismo Dateobjeto que terminas en problemas. Así que simplemente recurrí a solo usar el setSeconds()método y convertir mis datos en segundos (lo que funcionó bien).

Si alguien puede demostrar la adición de tiempo a un Date()objeto global utilizando todos los métodos establecidos y hacer que la hora final salga correctamente, me gustaría verlo, pero tengo la sensación de que un método establecido debe usarse a la vez en un Date()objeto determinado y mezclarlos conduce a un desastre.

var vTime = new Date();

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

vTime.setSeconds(iSecondsToAdd);

Aquí hay más documentación que puede ayudar :

coding_is_fun
fuente
2
  1. puede usar el setSecondsmétodo obteniendo segundos a partir de hoy y simplemente agregando 10 segundos

    var today = new Date();
    today.setSeconds(today.getSeconds() + 10);
  2. Puede agregar 10 * 1000 milisegundos a la nueva fecha:

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

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

Intenta de esta manera.

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

Solo llama y asigna new Date().addSeconds(10)

Ikram - Ud - Daula
fuente