/** Форматирует числовое значение показателя для карточек и мини-плиток. */ export function formatNumber(value: number | null): string { if (value === null || !Number.isFinite(value)) { return '—'; } return new Intl.NumberFormat('ru-RU', { maximumFractionDigits: Math.abs(value) >= 100 ? 1 : 3, }).format(value); } /** Приводит дату и время к короткому русскому формату для операторского интерфейса. */ export function formatDateTime(value: string | number | Date): string { const date = new Date(value); if (Number.isNaN(date.getTime())) { return '-'; } return new Intl.DateTimeFormat('ru-RU', { day: '2-digit', month: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit', }).format(date); } /** Конвертирует Date в формат, который ожидает input[type="datetime-local"]. */ export function toInputDateTimeValue(date: Date): string { const pad = (part: number) => String(part).padStart(2, '0'); return [ `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`, `${pad(date.getHours())}:${pad(date.getMinutes())}`, ].join('T'); } /** Преобразует значение datetime-local в ISO-строку для API-запросов. */ export function toIsoFromInput(value: string): string | undefined { if (!value) { return undefined; } const date = new Date(value); return Number.isNaN(date.getTime()) ? undefined : date.toISOString(); }