Agregar 10 segundos a una fecha


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


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

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


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?


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


4

Tengo un par de nuevas variantes

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

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 :


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)

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)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.