From 07c8a19cf3cc7d1e00f0126478264432fb2a4047 Mon Sep 17 00:00:00 2001 From: "Zimin A.N." Date: Mon, 4 May 2026 04:01:20 +0300 Subject: [PATCH] =?UTF-8?q?fix(admin-ui):=20pure-date=20=D0=BF=D0=B0=D1=80?= =?UTF-8?q?=D1=81=D0=B8=D0=BD=D0=B3=20=D0=BA=D0=B0=D0=BA=20local=20midnigh?= =?UTF-8?q?t=20(=D0=B7=D0=B0=D1=89=D0=B8=D1=82=D0=B0=20TZ=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BF=D0=B0=D0=B4=D0=BD=D0=B5=D0=B5=20UTC)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit format=date поля приходят как 'YYYY-MM-DD' без времени. new Date(s) интерпретирует их как UTC-midnight. В TZ западнее UTC (UTC-5 etc.) local Date уезжает на день назад → getDate() возвращает (день-1). Сейчас pure-date строки регексим и собираем через Date(y, m-1, d) — всегда local midnight. Datetime строки парсятся как раньше. --- ordinis-admin-ui/src/components/form/SchemaDrivenForm.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ordinis-admin-ui/src/components/form/SchemaDrivenForm.tsx b/ordinis-admin-ui/src/components/form/SchemaDrivenForm.tsx index 9d460d3..daefea3 100644 --- a/ordinis-admin-ui/src/components/form/SchemaDrivenForm.tsx +++ b/ordinis-admin-ui/src/components/form/SchemaDrivenForm.tsx @@ -51,7 +51,12 @@ const humanize = (key: string): string => const parseFormDate = (s: unknown): Date | null => { if (typeof s !== 'string' || !s) return null - const d = new Date(s) + // Pure date "YYYY-MM-DD" парсим как локальную полуночь, иначе для TZ западнее + // UTC new Date() уедет на день назад. Для строк с временем — стандартный парс. + const pureDate = /^(\d{4})-(\d{2})-(\d{2})$/.exec(s) + const d = pureDate + ? new Date(Number(pureDate[1]), Number(pureDate[2]) - 1, Number(pureDate[3])) + : new Date(s) if (Number.isNaN(d.getTime())) return null if (d.getFullYear() >= 9999) return null return d