Skip to content

Instantly share code, notes, and snippets.

@kaugesaar
Last active April 1, 2020 12:22
Show Gist options
  • Save kaugesaar/cfee21af82dc6247c854 to your computer and use it in GitHub Desktop.
Save kaugesaar/cfee21af82dc6247c854 to your computer and use it in GitHub Desktop.
The difference between now and an utc-timestamp readable for humans.
/**
* The difference between now and a prior or an
* upcoming event, returned as readable text for humans.
*
*
* @param {Number} unixTime milliseconds that have elapsed since
* 00:00:00 Thursday, 1 January 1970
* @param {boolean} ms set true if unixTime is not in milliseconds
* @return {String}
*/
function diffForHumans(unixTime, ms) {
// Adjust for milliseconds
ms = ms || false;
unixTime = (ms) ? unixTime * 1000 : unixTime;
var d = new Date();
var diff = Math.abs(d.getTime() - unixTime);
var intervals = {
y: diff / (365 * 24 * 60 * 60 * 1 * 1000),
m: diff / (30.5 * 24 * 60 * 60 * 1 * 1000),
d: diff / (24 * 60 * 60 * 1 * 1000),
h: diff / (60 * 60 * 1 * 1000),
i: diff / (60 * 1 * 1000),
s: diff / (1 * 1000),
}
Object.keys(intervals).map(function(value, index) {
return intervals[value] = Math.floor(intervals[value]);
})
var unit;
var count;
switch (true) {
case intervals.y > 0:
count = intervals.y;
unit = 'year';
break;
case intervals.m > 0:
count = intervals.m;
unit = 'month';
break;
case intervals.d > 0:
count = intervals.d;
unit = 'day';
break;
case intervals.h > 0:
count = intervals.h;
unit = 'hour';
break;
case intervals.i > 0:
count = intervals.i;
unit = 'minute';
break;
default:
count = intervals.s;
unit = 'second';
break;
}
if(count > 1) {
unit = unit + 's';
}
if(count === 0) {
return 'now';
}
return count + ' ' + unit + ((unixTime > d.getTime()) ? ' from now' : ' ago');
}
var now = new Date().getTime();
var eighteen_days_ago = now - (18 * 24 * 60 * 60 * 1 * 1000);
console.log(diffForHumans(now));
console.log(diffForHumans(eighteen_days_ago));
console.log(diffForHumans(1455574551, true));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment