-1
votes

Comment convertir l'horodatage en jours JavaScript?

Je reçois de la réponse de l'API et je veux calculer des jours à partir de l'heure actuelle.Je avez écrit une fonction pour cette conversion, mais donnez-moi un résultat sur le port.

function timeDifference(current, previous) {

        var msPerMinute = 60 * 1000;
        var msPerHour = msPerMinute * 60;
        var msPerDay = msPerHour * 24;
        var msPerMonth = msPerDay * 30;
        var msPerYear = msPerDay * 365;
    
        var elapsed = current - previous;
    
        if (elapsed < msPerMinute) {
             return Math.round(elapsed/1000) + ' seconds ago';   
        }
    
        else if (elapsed < msPerHour) {
             return Math.round(elapsed/msPerMinute) + ' minutes ago';   
        }
    
        else if (elapsed < msPerDay ) {
             return Math.round(elapsed/msPerHour ) + ' hours ago';   
        }
    
        else if (elapsed < msPerMonth) {
            return '' + Math.round(elapsed/msPerDay) + ' days ago';   
        }
    
        else if (elapsed < msPerYear) {
            return '' + Math.round(elapsed/msPerMonth) + ' months ago';   
        }
    
        else {
            return '' + Math.round(elapsed/msPerYear ) + ' years ago';   
        }
    }


1 commentaires

Envisagez d'ajouter un échantillon d'échantillon et une sortie respective que vous attendez.


3 Réponses :


0
votes

Je recommande d'utiliser une bibliothèque comme moment.js https://momentjs.com/docs/#/displaying/difefence/ Outre le codage plus facile, vous n'obtiendrez pas de problèmes d'années saut, sautez des secondes, etc.


0 commentaires

0
votes
function timeDifference(date) {
    var seconds = Math.floor((new Date() - date) / 1000);
    if(Math.round(seconds/(60*60*24*365.25)) >= 2) return Math.round(seconds/(60*60*24*365.25)) + " years ago";
    else if(Math.round(seconds/(60*60*24*365.25)) >= 1) return "1 year ago";
    else if(Math.round(seconds/(60*60*24*30.4)) >= 2) return Math.round(seconds/(60*60*24*30.4)) + " months ago";
    else if(Math.round(seconds/(60*60*24*30.4)) >= 1) return "1 month ago";
    else if(Math.round(seconds/(60*60*24*7)) >= 2) return Math.round(seconds/(60*60*24*7)) + " weeks ago";
    else if(Math.round(seconds/(60*60*24*7)) >= 1) return "1 week ago";
    else if(Math.round(seconds/(60*60*24)) >= 2) return Math.round(seconds/(60*60*24)) + " days ago";
    else if(Math.round(seconds/(60*60*24)) >= 1) return "1 day ago";
    else if(Math.round(seconds/(60*60)) >= 2) return Math.round(seconds/(60*60)) + " hours ago";
    else if(Math.round(seconds/(60*60)) >= 1) return "1 hour ago";
    else if(Math.round(seconds/60) >= 2) return Math.round(seconds/60) + " minutes ago";
    else if(Math.round(seconds/60) >= 1) return "1 minute ago";
    else if(seconds >= 2)return seconds + " seconds ago";
    else return seconds + "1 second ago";
}
you can also use this plugin javascript-time-ago

0 commentaires

0
votes

J'aime réduire les choses, voici ma solution.

p>

/**
 * @method msToTimeString : convert milliseconds to time string
 * @param {number} ms : milliseconds to convert
 */
const msToTimeString = ms => {
    const names = ["millisecond", "second", "minute", "hour", "day"]; // names
    return [1000, 60, 60, 24, 365].reduce((acc, cur, index) => ({...acc, [names[index]]: acc.val % cur, val: (acc.val - (acc.val % cur)) / cur}), {val: ms});
};

let past = new Date("2020-03-17T00:00:00").getTime(), // past date
    now = Date.now(); // now
    
console.log(msToTimeString(now - past)); // display !


0 commentaires