1b757a8d67
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
25 lines
1.3 KiB
TypeScript
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);
|
|
}
|