Files
portal/app/resources/js/utils/leadDate.ts
T
2026-06-22 20:54:28 +03:00

25 lines
1.3 KiB
TypeScript

/**
* Форматирование дат для UI блокировки источника и баннера нового проекта.
* Спека: docs/superpowers/specs/2026-06-22-project-source-edit-lock-ux-design.md.
*/
/** ISO-строку → «23 июня» (ru). Пусто/невалид → ''. */
export function formatLeadDate(iso: string | null | undefined): string {
if (!iso) return '';
const d = new Date(iso);
if (Number.isNaN(d.getTime())) return '';
return new Intl.DateTimeFormat('ru-RU', { day: 'numeric', month: 'long' }).format(d);
}
/**
* Дата старта лидов нового проекта по правилу слепка 18:00 МСК:
* создал до 18:00 МСК → лиды с завтра; после 18:00 → с послезавтра.
* РФ круглый год UTC+3 (без перехода на летнее время).
*/
export function firstLeadDate(now: Date = new Date()): string {
const msk = new Date(now.getTime() + 3 * 3600 * 1000);
const addDays = msk.getUTCHours() >= 18 ? 2 : 1;
const target = new Date(Date.UTC(msk.getUTCFullYear(), msk.getUTCMonth(), msk.getUTCDate() + addDays));
return new Intl.DateTimeFormat('ru-RU', { day: 'numeric', month: 'long', timeZone: 'UTC' }).format(target);
}