function toRelativePastTime(past) {
const now = Date.now();
const delta = Math.abs((now - past.getTime()) / 1000); // seconds
const seconds = Math.floor(delta);
const minutes = Math.floor(seconds / 60);
const hours = Math.floor(seconds / 3600);
const days = Math.floor(seconds / 86400);
if (seconds < 60)
return seconds === 1 ? "one second ago" : `${seconds} seconds ago`;
if (seconds < 3600)
return minutes === 1 ? "a minute ago" : `${minutes} minutes ago`;
if (seconds < 86400)
return hours === 1 ? "an hour ago" : `${hours} hours ago`;
if (seconds < 2592000) // 30 days
return days === 1 ? "yesterday" : `${days} days ago`;
if (seconds < 31104000) { // 12 months
const months = Math.floor(days / 30);
return months <= 1 ? "a month ago" : `${months} months ago`;
}
const years = Math.floor(days / 365);
return years <= 1 ? "a year ago" : `${years} years ago`;
}
function test(hoursAgo) {
const past = new Date(Date.now() - Math.round(hoursAgo * 3600 * 1000));
console.log(toRelativePastTime(past));
}
test(0.01); // 36 seconds ago
test(0.2); // 12 minutes ago
test(3); // 3 hours ago
test(25); // yesterday
test(360); // 15 days ago
test(1239); // a month ago
test(2239); // 3 months ago
test(8760); // a year ago
test(98763); // 11 years ago
/*
run:
36 seconds ago
12 minutes ago
3 hours ago
yesterday
15 days ago
a month ago
3 months ago
a year ago
11 years ago
*/