/** * Форматирует Unix timestamp (в секундах) в относительную строку в локали пользователя * («сегодня», «вчера», «5 дней назад») через Intl.RelativeTimeFormat. * @param time - Unix timestamp в секундах * @param locale - активная локаль (код или BCP-47) * @param precise - для свежее суток добавляет точность до часов и минут * («2 часа назад» вместо «сегодня») */ export const useFormatTimeAgo = (time: number, locale: string, precise = false): string => { const diffInMs = Date.now() - time * 1000; const diffInDays = Math.floor(diffInMs / 86_400_000); const rtf = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' }); if (precise && diffInDays < 1) { const diffInHours = Math.floor(diffInMs / 3_600_000); if (diffInHours < 1) { return rtf.format(-Math.floor(diffInMs / 60_000), 'minute'); } return rtf.format(-diffInHours, 'hour'); } if (diffInDays < 30) { return rtf.format(-diffInDays, 'day'); } if (diffInDays < 365) { return rtf.format(-Math.floor(diffInDays / 30), 'month'); } return rtf.format(-Math.floor(diffInDays / 365), 'year'); };