web-dev-qa-db-fra.com

Comment obtenir la différence de temps entre deux horodatages en secondes avec jQuery?

Je veux afficher x seconds ago basé sur un horodatage MySQL.

J'ai trouvé le plugin appelé timeago

Mais je ne peux pas trouver un moyen de le faire afficher seulement quelques secondes.

Je vais bien avec 61 secondes ou 300 secondes. Est-il possible de convertir la sortie en secondes avec timeago ou avec jQuery/JavaScript pur?

Merci pour toute aide !

Éditer:

Exemple de cas:

$time1 = "2014-02-02 23:54:04"; // plus PHP ways to format it.
//$time2 = NOW() , or date(); whatever. 

Je veux juste savoir combien de secondes depuis $time1.

Modifier 2:

Code de travail:

<script type="text/javascript">
$(function(){
    var d2 = new Date();
    var d1 = new Date("2014-02-02 23:54:04");
    $("a#timedif").html("Diff. Seconds : "+((d2-d1)/100).toString());
    // note that you may want to round the value
});
</script>

Il génère Diff. Seconds : NaN

13
jeff

en supposant que vous analysiez la chaîne dans un objet de date JavaScript, vous pouvez faire (date2 - date1)/1000

pour analyser l'horodatage au format mysql, il suffit d'introduire la chaîne dans le nouveau Date ():

 var d2 = new Date('2038-01-19 03:14:07');
 var d1 = new Date('2038-01-19 03:10:07');

 var seconds =  (d2- d1)/1000;

correction de l'édition 2 dans la question:

<script type="text/javascript">
$(function(){
var d2 = new Date();
var d1 = new Date("2014-02-02 23:54:04");
$("a#timedif").html("Diff. Seconds : "+((d2-d1)/1000).toString());
 });
13
CodeToad

Si vous êtes d'accord avec ce plugin, vous pouvez le modifier un peu pour ne travailler qu'avec quelques secondes

  var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||
    seconds < 90 && substitute($l.minute, 1) ||
    minutes < 45 && substitute($l.minutes, Math.round(minutes)) ||
    minutes < 90 && substitute($l.hour, 1) ||
    hours < 24 && substitute($l.hours, Math.round(hours)) ||
    hours < 42 && substitute($l.day, 1) ||
    days < 30 && substitute($l.days, Math.round(days)) ||
    days < 45 && substitute($l.month, 1) ||
    days < 365 && substitute($l.months, Math.round(days / 30)) ||
    years < 1.5 && substitute($l.year, 1) ||
    substitute($l.years, Math.round(years));

avec cette partie, n'allez qu'avec la conversion en secondes

voir le violon: http://jsfiddle.net/zGXLU/1/

1
CBeTJlu4ok

Mon travail avec la différence de temps pour calculer chaque valeur séparément

var start = new Date('Mon Jul 30 2018 19:35:35 GMT+0500');
var end = new Date('Mon Jul 30 2018 21:15:00 GMT+0500');

var hrs = end.getHours() - start.getHours();
var min = end.getMinutes() - start.getMinutes(); 
var sec = end.getSeconds() - start.getSeconds();  

var hour_carry = 0;
var minutes_carry = 0;
if(min < 0){
       min += 60;
       hour_carry += 1;
   }
hrs = hrs - hour_carry;
if(sec < 0){
       sec += 60;
       minutes_carry += 1;
   }

min = min - minutes_carry;

console.log("hrs",hrs);
console.log("min",min);
console.log("sec",sec);
console.log(hrs + "hrs " + min +"min " + sec + "sec");
0
Mubasher Shahzad

jQuery est juste une bibliothèque JavaScript, donc JavaScript fonctionnera simplement dans votre script jQuery:

// specified date:
var oneDate = new Date("November 02, 2017 06:00:00");

// number of milliseconds since midnight Jan 1 1970 till specified date
var oneDateMiliseconds = oneDate.getTime();

// number of milliseconds since midnight Jan 1 1970 till now
var currentMiliseconds = Date.now(); 

// return time difference in milliseconds
var timePassedInMilliseconds = (currentMiliseconds-oneDateMiliseconds)/1000;
alert(timePassedInMilliseconds);
0
Gilbert Cut