/** * Форматирует сообщение для тоста после сохранения slepok-чувствительных * правок проекта. * * Бизнес-инвариант: applies_from = N.21:00 МСК — час, когда поставщик * фиксирует свой slepok (см. docs/superpowers/specs/2026-05-26-slepok-routing-protection-design.md). * Поэтому в UI всегда показываем «21:00 МСК», а календарную дату берём * по часовому поясу Москвы — независимо от локали браузера клиента. */ const moscowDateFmt = new Intl.DateTimeFormat('ru-RU', { timeZone: 'Europe/Moscow', day: '2-digit', month: '2-digit', year: 'numeric', }); export function formatAppliesFromMessage(appliesFrom: string | null | undefined): string { if (!appliesFrom) { return 'Сохранено.'; } const date = moscowDateFmt.format(new Date(appliesFrom)); return `Сохранено. Изменения вступят в силу ${date} в 21:00 МСК.`; }