lbry.tech/modules/relative-date.js

59 lines
1.4 KiB
JavaScript
Raw Normal View History

"use strict";
// P R O G R A M
2018-07-23 23:46:58 +02:00
const relativeDate = (undefined => {
const SECOND = 1000;
const MINUTE = 60 * SECOND;
const HOUR = 60 * MINUTE;
const DAY = 24 * HOUR;
const WEEK = 7 * DAY;
const YEAR = DAY * 365;
const MONTH = YEAR / 12;
const formats = [
[ 0.7 * MINUTE, "just now" ],
[ 1.5 * MINUTE, "a minute ago" ],
[ 60 * MINUTE, "minutes ago", MINUTE ],
[ 1.5 * HOUR, "an hour ago" ],
[ DAY, "hours ago", HOUR ],
[ 2 * DAY, "yesterday" ],
[ 7 * DAY, "days ago", DAY ],
[ 1.5 * WEEK, "a week ago" ],
[ MONTH, "weeks ago", WEEK ],
[ 1.5 * MONTH, "a month ago" ],
[ YEAR, "months ago", MONTH ],
[ 1.5 * YEAR, "a year ago" ],
[ Number.MAX_VALUE, "years ago", YEAR ]
];
function relativeDate(input, reference) {
!reference && (reference = (new Date).getTime());
reference instanceof Date && (reference = reference.getTime());
input instanceof Date && (input = input.getTime());
const delta = reference - input;
const len = formats.length;
for (let i = -1; ++i < len;) {
const format = formats[i];
if (delta < format[0]) {
return format[2] === undefined ? format[1] : Math.round(delta / format[2]) + " " + format[1];
}
}
}
return relativeDate;
})();
// E X P O R T
if (typeof module !== "undefined" && module.exports) {
module.exports = exports = relativeDate;
}