Last active
April 1, 2020 12:22
-
-
Save kaugesaar/cfee21af82dc6247c854 to your computer and use it in GitHub Desktop.
The difference between now and an utc-timestamp readable for humans.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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'); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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