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';
}
}
3 Réponses :
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. P>
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
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 !
Envisagez d'ajouter un échantillon d'échantillon et une sortie respective que vous attendez.