From a82b520952f01b2cbbb7becd5181f0c8cf440d4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=97=D0=B8=D0=BC=D0=B8=D0=BD?= Date: Sat, 20 Jun 2026 21:37:05 +0000 Subject: [PATCH] =?UTF-8?q?fix(ui):=20DatePicker=20off-by-one=20=D0=B2=20T?= =?UTF-8?q?Z=20!=3D=20UTC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ordinis-admin-ui/src/ui/components/date-picker.tsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/ordinis-admin-ui/src/ui/components/date-picker.tsx b/ordinis-admin-ui/src/ui/components/date-picker.tsx index 7a7e37e..d009ed1 100644 --- a/ordinis-admin-ui/src/ui/components/date-picker.tsx +++ b/ordinis-admin-ui/src/ui/components/date-picker.tsx @@ -1,6 +1,7 @@ import * as React from 'react' import { Input } from './input' import { FieldLabel, FieldHint, FieldError } from './field' +import { formatIsoDate, parseFormDate } from '@/lib/dates' import { cn } from '@/lib/utils' /** @@ -32,10 +33,13 @@ export type DatePickerProps = { inputClassName?: string } +// Local-TZ форматирование. toISOString().slice(0,10) на Date в TZ != UTC +// даёт day-shift (например, 21.06 MSK → "2026-06-20"), что выглядит как +// «picker показывает на день меньше». const toIso = (v: Date | string | null | undefined): string => { if (!v) return '' if (typeof v === 'string') return v.slice(0, 10) - if (v instanceof Date && !isNaN(v.getTime())) return v.toISOString().slice(0, 10) + if (v instanceof Date && !isNaN(v.getTime())) return formatIsoDate(v) return '' } @@ -64,8 +68,7 @@ export function DatePicker({ onChange?.(null) return } - const d = new Date(raw + 'T00:00:00') - onChange?.(isNaN(d.getTime()) ? null : d) + onChange?.(parseFormDate(raw)) } return (