37 votes

Calculer la différence entre 2 timestamps en utilisant javascript

Je dois calculer la différence entre deux horodatages. Pouvez-vous également m'aider à convertir une chaîne de caractères en horodatage ? J'utilise uniquement du javascript simple. PAS DE JQUERY.

Voici ma fonction :

function clearInactiveSessions()
{
    alert("ok");
    <c:if test="${not empty pageScope.sessionView.sessionInfo}">
        var currentTime = new Date().getTime();
        alert("curr:"+currentTime);
        var difference=new Date();
        <c:forEach items="${pageScope.sessionView.sessionInfo}" var="inactiveSession">
            var lastAccessTime = ${inactiveSession.lastUpdate};
            difference.setTime(Maths.abs(currentTime.getTime()-lastAccessTime.getTime()));
            var timediff=diff.getTime();
            alert("timediff:"+timediff);
            var mins=Maths.floor(timediff/(1000*60*60*24*60));
            alert("mins:"+mins);
            if(mins<45)
                clearSession(${item.sessionID});
        </c:forEach>
    </c:if>
}

65voto

Anuj Points 1387

Je publie mon propre exemple, essayez de l'intégrer dans votre code.

function timeDifference(date1,date2) {
    var difference = date1.getTime() - date2.getTime();

    var daysDifference = Math.floor(difference/1000/60/60/24);
    difference -= daysDifference*1000*60*60*24

    var hoursDifference = Math.floor(difference/1000/60/60);
    difference -= hoursDifference*1000*60*60

    var minutesDifference = Math.floor(difference/1000/60);
    difference -= minutesDifference*1000*60

    var secondsDifference = Math.floor(difference/1000);

    console.log('difference = ' + 
      daysDifference + ' day/s ' + 
      hoursDifference + ' hour/s ' + 
      minutesDifference + ' minute/s ' + 
      secondsDifference + ' second/s ');
}

29voto

Combine Points 820

Basé sur la réponse approuvée :

function(timestamp1, timestamp2) {
    var difference = timestamp1 - timestamp2;
    var daysDifference = Math.floor(difference/1000/60/60/24);

    return daysDifference;
}

3voto

AnandShiva Points 325

Une meilleure alternative serait d'utiliser window.performance API.

const startTime = window.performance.now()
setTimeout(()=>{
 const endTime = window.performance.now()
 console.log("Time Elapsed : ",endTime-startTime) // logs ~2000 milliseconds
}, 2000)

0voto

RobG Points 41170

Si votre chaîne de caractères est Mon May 27 11:46:15 IST 2013, vous pouvez la convertir en un objet date en analysant les bits (en supposant des noms anglais de 3 lettres pour les mois, ajustez si nécessaire) :

// Convert string like Mon May 27 11:46:15 IST 2013 to date object 
function stringToDate(s) {
  s = s.split(/[\s:]+/);
  var months = {'jan':0, 'feb':1, 'mar':2, 'apr':3, 'may':4, 'jun':5, 
                'jul':6, 'aug':7, 'sep':8, 'oct':9, 'nov':10, 'dec':11};
  return new Date(s[7], months[s[1].toLowerCase()], s[2], s[3], s[4], s[5]);
}

alert(stringToDate('Mon May 27 11:46:15 IST 2013'));

Notez que si vous utilisez des chaînes de dates dans le même fuseau horaire, vous pouvez ignorer le fuseau horaire pour le calcul des différences. Si elles se trouvent dans des fuseaux horaires différents (y compris les différences d'heure d'été), vous devez tenir compte de ces différences.

-1voto

Cláudio Dev Points 1

Une simple opération pour obtenir le décalage horaire.

var initialTime = new Date();
var finalTime = new Date();

console.log({
    days: finalTime.getDay() - initialTime.getDay(),
    hours: finalTime.getHours() - initialTime.getHours(),
    minutes: finalTime.getMinutes() - initialTime.getMinutes(),
    seconds: finalTime.getSeconds() - initialTime.getSeconds(),
    milliseconds: finalTime.getMilliseconds() - initialTime.getMilliseconds(),
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X