J'essaie d'obtenir le nombre de secondes entre deux dates en javascript.
Questions ici et ici suggèrent qu'une simple opération de soustraction devrait faire l'affaire et d'autres réponses suggèrent que vous utilisiez soit le .getTime() ou .valueOf() attributs.
Mais malgré tout cela, lorsque je soustrais les deux dates, qui sont distantes de 5 secondes, j'obtiens la valeur 1551181475795 qui est beaucoup trop grande pour être correcte.
Voici mon code :

var countDownDate = new Date("Mar 16, 2019 16:33:25").valueOf();
var dist = 347155200;
// Update the count down every 1 second
var x = setInterval(function() {

  // Get todays date and time
  var now = new Date("Mar 16, 2019 16:33:30");

  // Find the distance between now and the count down date
  var distance = Math.abs(now - countDownDate / 1000);
  // Display the result in the element with id="demo"
  document.getElementById("demo").innerHTML = distance;

  // If the count down is finished, write some text
  if (distance < 0) {
    clearInterval(x);
    document.getElementById("demo").innerHTML = "EXPIRED";
  }
}, 1000);
<p id='demo'>

Comme vous pouvez le voir, les deux temps ne sont séparés que de 5 secondes, mais la valeur qui les sépare n'a aucun sens.
Merci d'avance!

0
Arun Mani 16 mars 2019 à 20:17

2 réponses

Meilleure réponse

C'est une question d'ordre des opérations, vous divisez le countDownDate par 1000 avant de faire la soustraction (vous calculez now - countDownDate / 1000 cependant, vous devez calculer (now - countDownDate) / 1000, soustraction d'abord ):

var countDownDate = new Date("Mar 16, 2019 16:33:25").valueOf();
var dist = 347155200;
// Update the count down every 1 second
var x = setInterval(function() {

  // Get todays date and time
  var now = new Date("Mar 16, 2019 16:33:30");

  // Find the distance between now and the count down date
  var distance = Math.abs((now - countDownDate) / 1000);
  // Display the result in the element with id="demo"
  document.getElementById("demo").innerHTML = distance;

  // If the count down is finished, write some text
  if (distance < 0) {
    clearInterval(x);
    document.getElementById("demo").innerHTML = "EXPIRED";
  }
}, 1000);
<p id="demo"></p>
1
MrGeek 17 mars 2019 à 11:53

Comme vous l'aviez recherché, vous pouvez simplement réduire la date la plus récente de l'ancienne qui renvoie les millisecondes entre les deux dates.

En divisant cela par 1000, vous obtenez les secondes.

let start = new Date("Mar 16, 2019 16:33:25")
let end = new Date("Mar 16, 2019 16:33:30");
let secondsBetween = (end - start) / 1000;
console.log("without value of:", secondsBetween, "seconds")

start = new Date("Mar 16, 2019 16:33:25").valueOf()
end = new Date("Mar 16, 2019 16:33:30").valueOf()
secondsBetween = (end - start) / 1000;

console.log("using value of:",(end - start) / 1000, "seconds")
0
Arttu Pennanen 16 mars 2019 à 17:35