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.