import dayjs from 'dayjs'; export function getRelativeTimeString( date: string | Date, isTimed: boolean = false, ): string { if (!Intl?.RelativeTimeFormat) { return date.toString(); } const rtf = new Intl.RelativeTimeFormat('en', { numeric: 'auto', style: 'narrow', }); const currentDate = new Date(); const targetDate = new Date(date); const diffInMilliseconds = currentDate.getTime() - targetDate.getTime(); const diffInMinutes = Math.round(diffInMilliseconds / (1000 * 60)); const diffInHours = Math.round(diffInMilliseconds / (1000 * 60 * 60)); const diffInDays = Math.round(diffInMilliseconds / (1000 * 60 * 60 * 24)); let relativeTime; if (diffInMinutes < 60) { relativeTime = rtf.format(-diffInMinutes, 'minute'); } else if (diffInHours < 24) { relativeTime = rtf.format(-diffInHours, 'hour'); } else if (diffInDays < 7) { if (isTimed) { relativeTime = dayjs(date).format('ddd h:mm A'); } else { relativeTime = rtf.format(-diffInDays, 'day'); } } else if (diffInDays < 30) { relativeTime = rtf.format(-Math.round(diffInDays / 7), 'week'); } else if (diffInDays < 365) { relativeTime = rtf.format(-Math.round(diffInDays / 30), 'month'); } else { if (isTimed) { relativeTime = dayjs(date).format('MMM D, YYYY h:mm A'); } else { relativeTime = dayjs(date).format('MMM D, YYYY'); } } if (relativeTime === 'this minute') { return 'just now'; } return relativeTime; } export function formatMonthDate(date: string): string { return new Date(date).toLocaleDateString('en-US', { month: 'long', year: 'numeric', }); } export function formatActivityDate(date: string): string { return new Date(date).toLocaleDateString('en-US', { month: 'long', day: 'numeric', }); } export function getCurrentPeriod() { const now = new Date(); const hour = now.getHours(); if (hour < 12) { return 'morning'; } else if (hour < 18) { return 'afternoon'; } else { return 'evening'; } }