web-dev-qa-db-fra.com

Obtenir le décalage horaire entre deux dates en secondes

J'essaie de faire la différence entre deux dates en quelques secondes. La logique serait la suivante:

  • fixer une date initiale qui serait maintenant;
  • fixer une date finale qui serait la date initiale plus quelques secondes dans le futur (disons 15 par exemple)
  • obtenir la différence entre ces deux (le nombre de secondes)

La raison pour laquelle je le fais avec des dates, c'est parce que la date/heure finale dépend de certaines autres variables et que ce n'est jamais la même chose (cela dépend de la rapidité avec laquelle un utilisateur fait quelque chose) et que je stocke également la date initiale pour d'autres choses.

J'ai essayé quelque chose comme ça: 

var _initial = new Date(),
    _initial = _initial.setDate(_initial.getDate()),
    _final = new Date(_initial);
    _final = _final.setDate(_final.getDate() + 15 / 1000 * 60);

var dif = Math.round((_final - _initial) / (1000 * 60));

Le fait est que je n’obtiens jamais la bonne différence. J'ai essayé de diviser par 24 * 60, ce qui me laisserait les secondes, mais je ne réussis jamais. Alors, qu'est-ce qui ne va pas dans ma logique? Je fais peut-être une erreur stupide car il est assez tard, mais ça me dérange de ne pas pouvoir le faire fonctionner :)

100
Roland

Le code

var startDate = new Date();
// Do your operations
var endDate   = new Date();
var seconds = (endDate.getTime() - startDate.getTime()) / 1000;

Ou encore plus simple (endDate - startDate) / 1000 comme indiqué dans les commentaires, sauf si vous utilisez TypeScript.


L'explication

Vous devez appeler la méthode getTime() pour les objets Date, puis les soustraire et les diviser par 1 000 (étant donné qu’elles sont initialement exprimées en millisecondes). De plus, lorsque vous appelez la méthode getDate(), vous obtenez en fait le jour du mois sous la forme d'un entier compris entre 1 et 31 (pas sur la base de zéro), contrairement au temps que vous obtiendrez. d'appeler la méthode getTime(), représentant le nombre de millisecondes depuis le 1er janvier 1970 à 00:00


Rant

En fonction de vos opérations liées à la date, vous pouvez investir dans l’intégration d’une bibliothèque telle que date.js ou moment.js qui fabrique des objets tellement plus facile pour le développeur, mais ce n'est qu'une question de préférence personnelle.

Par exemple dans moment.js nous ferions moment1.diff(moment2, "seconds") qui est belle.


Docs utiles pour cette réponse

231
Juan Cortés
<script type="text/javascript">
var _initial = '2015-05-21T10:17:28.593Z';
var fromTime = new Date(_initial);
var toTime = new Date();

var differenceTravel = toTime.getTime() - fromTime.getTime();
var seconds = Math.floor((differenceTravel) / (1000));
document.write('+ seconds +');
</script>
3

Vous pouvez utiliser new Date().getTime() pour obtenir les horodatages. Vous pouvez ensuite calculer la différence entre end et start et enfin transformer l’horodatage ms en s.

const start = new Date().getTime();
const end = new Date().getTime();

const diff = end - start;
const seconds = Math.floor(diff / 1000 % 60);
1

essayez d'utiliser des fonctions dédiées à partir de langages de programmation de haut niveau. JavaScript .getSeconds(); convient ici:

var specifiedTime = new Date("November 02, 2017 06:00:00");
var specifiedTimeSeconds = specifiedTime.getSeconds(); 

var currentTime = new Date();
var currentTimeSeconds = currentTime.getSeconds(); 

alert(specifiedTimeSeconds-currentTimeSeconds);
0
Gilbert Cut

Le code ci-dessous donnera la différence de temps en seconde. 

    var date1 = new Date(); // current date
    var date2 = new Date("06/26/2018"); // mm/dd/yyyy format
    var timeDiff = Math.abs(date2.getTime() - date1.getTime()); // in miliseconds
    var timeDiffInSecond = Math.ceil(timeDiff / 1000); // in second

    alert(timeDiffInSecond );
0
Gautam Rai

décalage horaire entre maintenant et 10 minutes plus tard en utilisant momentjs

let start_time = moment().format('YYYY-MM-DD HH:mm:ss');
let next_time = moment().add(10, 'm').format('YYYY-MM-DD HH:mm:ss');

let diff_milliseconds = Date.parse(next_time) - Date.parse(star_time);
let diff_seconds = diff_milliseconds * 1000;
0
Surya Singh