How to calculate relative past time from a given date & time (e.g., 3 hours ago, 5 days ago, a month ago) in TypeScript

1 Answer

0 votes
function toRelativePastTime(past: Date): string {
    const now: number = Date.now();
    const delta: number = Math.abs((now - past.getTime()) / 1000); // seconds

    const seconds: number = Math.floor(delta);
    const minutes: number = Math.floor(seconds / 60);
    const hours: number = Math.floor(seconds / 3600);
    const days: number = 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: number = Math.floor(days / 365);

    return years <= 1 ? "a year ago" : `${years} years ago`;
}

function test(hoursAgo: number): void {
    const past: Date = 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

*/

 



answered Apr 13 by avibootz

Related questions

...