/** Утилиты форматирования для карточек канала (без React). */ export function formatTime(iso: string | null) { if (!iso) return '—' return new Date(iso).toLocaleString([], { day: '2-digit', month: '2-digit', hour: '2-digit', minute: '2-digit', }) } /** Минуты суток → «HH:MM:00» — формат `TimeOnly` на сервере. */ export function toTime(minutes: number): string { const m = ((minutes % (24 * 60)) + 24 * 60) % (24 * 60) return `${String(Math.floor(m / 60)).padStart(2, '0')}:${String(m % 60).padStart(2, '0')}:00` } /** * Момент UTC во времени канала. Сетка задаётся в нём, поэтому предпросмотр показывается так же: * локальное время админа тут только запутало бы. */ export function channelTime(iso: string, utcOffsetMinutes: number): Date { return new Date(new Date(iso).getTime() + utcOffsetMinutes * 60_000) } /** «HH:MM» во времени канала. */ export function formatChannelTime(iso: string, utcOffsetMinutes: number): string { const d = channelTime(iso, utcOffsetMinutes) return `${String(d.getUTCHours()).padStart(2, '0')}:${String(d.getUTCMinutes()).padStart(2, '0')}` } /** ffmpeg-цвет (0xRRGGBB / имя) → CSS для превью-плашки. */ export function cssColor(value: string): string { const v = value.trim() if (v.startsWith('0x')) return `#${v.slice(2)}` return v }