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", });
253 views