Create a function to format time ago with Intl native api
export const maximums: [number, Intl.RelativeTimeFormatUnit][] = [
[60, "seconds"],
[3600, "minutes"],
[86400, "hours"],
[604800, "days"],
[2592000, "weeks"],
[31536000, "months"],
[Infinity, "years"],
];
export function formatTimeAgo(date: Date) {
const durationInSeconds = (date.getTime() - Date.now()) / 1000;
const maximum = maximums.find(([threshold]) => Math.abs(durationInSeconds) < threshold);
if (!maximum) {
const [largestThreshold, largestUnit] = maximums[maximums.length - 1];
return timeFormatter.format(Math.round(durationInSeconds / largestThreshold), largestUnit as Intl.RelativeTimeFormatUnit);
}
const [threshold, unit] = maximum;
const formattedDuration = Math.round(durationInSeconds / threshold);
return timeFormatter.format(formattedDuration, unit as Intl.RelativeTimeFormatUnit);
}
export const timeFormatter = new Intl.RelativeTimeFormat("en-US", {
style: "long",
});
254 views