Ajouter 10 secondes à une date


Réponses:


416

Il y a aussi une setSecondsméthode:

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

Pour une liste des autres Date fonctions, vous devriez consulter MDN


setSeconds gérera correctement les cas enveloppants:

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
Attention, mon installation Nodejs renvoie d.getSeconds () sous forme de chaîne. J'ai dû changer cela en (+ d.getSeconds ()) L'unaire plus convertit une chaîne en nombre. Peut-être un peu plus évident serait 1 * d.getSeconds ()
tqwhite

1
@tqwhite, typeof new Date().getSeconds()retourne 'number'dans le nœud, donc je pense que vous pouvez avoir d'autres problèmes (sauf si vous êtes sur une version obsolète du nœud ou quelque chose).
zzzzBov

2
Essayez de faire d.setSeconds(d.getSeconds() - 92);et vous vous retrouverez avec 2'32 "de différence au lieu de 1'32". La solution avec new Date(d.getTime() - 92*1000);fonctionne cependant!
Rafalon

1
S'appuyer sur un comportement non documenté (que setSeconds (70) incrémentera les minutes d'une unité et mettra les secondes à 10) semble généralement une mauvaise pratique. Les réponses (actuellement suivantes) pointant vers Date.getTime () + <nombre de millisecondes à ajouter> semblent être l'approche voulue et prise en charge, et seraient claires pour la plupart des programmeurs provenant de différentes langues sans connaissance encyclopédique des nuances non documentées de chaque moteur JavaScript particulier.
Tom Dibble

1
Un problème peut survenir avec les fuseaux horaires historiques, voir les commentaires sous la réponse de @ Ron: stackoverflow.com/a/17267937/198797 . Ce n'est peut-être pas un scénario courant mais un problème néanmoins.
tsemer

110
// let timeObject = new Date();
// let seconds = 10 * 1000; // 10000 milliseconds
timeObject = new Date(timeObject.getTime() + seconds);

33
... et la raison pour laquelle vous avez ajouté 10000 est parce que les dates Javascript fonctionnent en millisecondes, soit 10000 = 10 * 1000
psiphi75

1
Et le + avant timeObject est nécessaire car il convertit timeObject en un nombre. Donc, c'est comme timeObject.getTime () dans la réponse de Ron
James

1
JavaScript est tellement méchant. Ces premières API sont un peu foirées.
usr

62

Juste pour les maniaques de la performance parmi nous.

obtenir du temps

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

5,196,949 Ops / sec, le plus rapide


setSeconds

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

2936604 Ops / sec, 43% plus lent


moment.js

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

22549 Ops / sec, 100% plus lent


Alors peut-être que c'est le moins lisible par l'homme (pas si mal) mais le moyen le plus rapide d'aller :)

tests en ligne jspref


3
Merci pour les détails, très utiles :)
Dean

58
const timeObject = new Date(); 
timeObject = new Date(timeObject.getTime() + 1000 * 10);
console.log(timeObject);

Veuillez également vous référer: Comment ajouter 30 minutes à un objet Date JavaScript?


7
de toutes les mauvaises réponses ici, c'est la bonne.
Cory Mawhorter

Oui, c'est la bonne réponse. Malheureusement, Google se réfère à cette question si vous recherchez "javascript date add seconds" et que la réponse la plus votée est incorrecte.
Philipp Gächter

2
Quelqu'un peut-il expliquer ce que la réponse sélectionnée (actuellement de @zzzzBov) fait mal? Ça marche pour moi.
tsemer

1
@tsemer, au premier coup d'œil, je pensais que la réponse de zzzzBov n'était pas correcte, car je ne pensais pas qu'elle mettrait à jour la valeur minute si elle était hors de portée. Mais en raison de votre «défi», j'ai examiné le MDN et confirmé que la réponse est certainement juste. :)
Ron

1
@tsemer Essayez dans un navigateur Web avec prise en charge des fuseaux horaires historiques (Internet Explorer 11, par exemple): définissez également votre fuseau horaire système sur "Asie / Iekaterinbourg":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

Essaye ça

a = new Date();
a.setSeconds(a.getSeconds() + 10);


4

J'ai quelques nouvelles variantes

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

2

L' Date()objet en javascript n'est pas vraiment intelligent.

Si vous vous concentrez uniquement sur l'ajout de secondes, cela semble gérer les choses en douceur, mais si vous essayez d'ajouter X nombre de secondes, puis ajoutez X nombre de minutes et d'heures, etc., au même Dateobjet que vous vous retrouvez en difficulté. Je suis donc simplement revenu à utiliser uniquement la setSeconds()méthode et à convertir mes données en secondes (ce qui a bien fonctionné).

Si quelqu'un peut démontrer l'ajout de temps à un Date()objet global à l' aide de toutes les méthodes définies et que l'heure finale s'affiche correctement, je voudrais le voir, mais j'ai l'impression qu'une seule méthode définie doit être utilisée à la fois sur un Date()objet donné et les mélanger mène à un gâchis.

var vTime = new Date();

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

vTime.setSeconds(iSecondsToAdd);

Voici une documentation supplémentaire qui peut vous aider :


2
  1. vous pouvez utiliser la setSecondsméthode en obtenant des secondes à partir d'aujourd'hui et en ajoutant simplement 10 secondes

    var today = new Date();
    today.setSeconds(today.getSeconds() + 10);
  2. Vous pouvez ajouter 10 * 1000 millisecondes à la nouvelle date:

    var today = new Date(); 
    today = new Date(today.getTime() + 1000*10);
  3. Vous pouvez utiliser setTime:

    today.setTime(now.getTime() + 10000)

1

Essayez de cette façon.

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

Il suffit d'appeler et d'attribuer new Date().addSeconds(10)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.