Human readable duration format
JavaScript
function formatDuration(seconds) {
if (seconds === 0) {
return 'now';
}
var numYears = Math.floor(seconds / (86400 * 365));
var numDays = Math.floor(seconds % (86400 * 365) / 86400);
var numHours = Math.floor(((seconds % (86400 * 365)) % 86400) / 3600);
var numMinutes = Math.floor((((seconds % (86400 * 365)) % 86400) % 3600) / 60);
var numSeconds = (((seconds % (86400 * 365)) % 86400) % 3600) % 60;
var secondsFun = function () {
return (numSeconds ? (((seconds > 60) ? ' and ' + numSeconds + " second" : +numSeconds + " second") + (numSeconds === 1 ? '' : 's')) : '');
};
var minutesFun = function () {
if (numSeconds === 0 && numDays !== 0) {
return 'and ' + (numMinutes ? numMinutes + " minute" + (numMinutes === 1 ? '' : 's') : '');
}
return (numMinutes ? numMinutes + " minute" + (numMinutes === 1 ? '' : 's') : '');
};
var hoursFun = function () {
if (minutesFun().charAt(0) === 'a') {
return (numHours ? numHours + " hour" + (numHours === 1 ? ' ' : 's ') : '');
}
if (numSeconds === 0 && numMinutes === 0) {
return (numHours ? numHours + " hour" + (numHours === 1 ? '' : 's') : '');
}
return (numHours ? numHours + " hour" + (numHours === 1 ? ', ' : 's, ') : '');
};
var daysFun = function () {
return (numDays ? numDays + " day" + (numDays === 1 ? ', ' : 's, ') : '');
};
var yearsFun = function () {
return (numYears ? numYears + " year" + (numYears === 1 ? ', ' : 's, ') : '');
};
return yearsFun() + daysFun() + hoursFun() + minutesFun() + secondsFun();
}
console.log(formatDuration((1520265552000-1520264907000)/1000)); // returns "1 hour, 1 minute and 2 seconds"