From 4ad91e4285552248337ab1ff4c2d409910ea8e54 Mon Sep 17 00:00:00 2001 From: Lizzie Lerwill Date: Mon, 19 Jan 2026 23:19:09 +0100 Subject: [PATCH 1/3] fix: year fixed, bug with month to fix --- .../experimental/DatePicker/DatePicker.tsx | 1 + .../experimental/DatePicker/util/index.ts | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/components/experimental/DatePicker/DatePicker.tsx b/src/components/experimental/DatePicker/DatePicker.tsx index 31278065..176b1627 100644 --- a/src/components/experimental/DatePicker/DatePicker.tsx +++ b/src/components/experimental/DatePicker/DatePicker.tsx @@ -397,6 +397,7 @@ function DatePickerImpl(props: DatePickerProps): JSX.Element { value={singleSource ? dateToCalendarDate(singleSource) : undefined} onChange={(dv: DateValue | null | undefined) => { const next = dv ? calendarDateToDate(dv) : null; + // emitSingle(next); handleSelectSingle(next); }} autoFocus={autoFocus} diff --git a/src/components/experimental/DatePicker/util/index.ts b/src/components/experimental/DatePicker/util/index.ts index 4b22663b..ef61de88 100644 --- a/src/components/experimental/DatePicker/util/index.ts +++ b/src/components/experimental/DatePicker/util/index.ts @@ -11,6 +11,22 @@ function isCalendarLike(v: unknown): v is CalendarLike { export function tryParse(raw: string, fmt: string, locale?: Locale): Date | null { if (!raw?.trim()) return null; + + // const formatParts = fmt.replace(/[^a-zA-Z]/g, ' ').split(' ').filter(Boolean); + // const rawParts = raw.replace(/[^0-9]/g, ' ').split(' ').filter(Boolean); + + // const yearFormatIndex = formatParts.findIndex(p => p.toLowerCase().includes('y')); + + // if (yearFormatIndex !== -1) { + // const yearFormat = formatParts[yearFormatIndex]; + // if (yearFormat.length === 4 && rawParts.length === yearFormatIndex + 1) { + // const yearPart = rawParts[yearFormatIndex]; + // if (yearPart && yearPart.length > 0 && yearPart.length < 4) { + // return null; + // } + // } + // } + const p = dfParse(raw, fmt, new Date(), { locale }); if (dfIsValid(p)) return p; const loose = new Date(raw); @@ -61,5 +77,10 @@ export function dateToCalendarDate(d: Date): CalendarDate { } export function calendarDateToDate(dv: DateValue): Date { + // const d = new Date(dv.year, dv.month - 1, dv.day); + // if (dv.year < 100) { + // d.setFullYear(dv.year); + // } + // return d; return new Date(dv.year, dv.month - 1, dv.day); } From 59e9a84ad6e92440234dcf4e30eacd7c22660604 Mon Sep 17 00:00:00 2001 From: Lizzie Lerwill Date: Tue, 20 Jan 2026 00:11:34 +0100 Subject: [PATCH 2/3] fix: added setFullYear() to fix calendarDateToDate function --- .../experimental/DatePicker/DatePicker.tsx | 1 - .../experimental/DatePicker/util/index.ts | 27 +++++-------------- 2 files changed, 6 insertions(+), 22 deletions(-) diff --git a/src/components/experimental/DatePicker/DatePicker.tsx b/src/components/experimental/DatePicker/DatePicker.tsx index 176b1627..31278065 100644 --- a/src/components/experimental/DatePicker/DatePicker.tsx +++ b/src/components/experimental/DatePicker/DatePicker.tsx @@ -397,7 +397,6 @@ function DatePickerImpl(props: DatePickerProps): JSX.Element { value={singleSource ? dateToCalendarDate(singleSource) : undefined} onChange={(dv: DateValue | null | undefined) => { const next = dv ? calendarDateToDate(dv) : null; - // emitSingle(next); handleSelectSingle(next); }} autoFocus={autoFocus} diff --git a/src/components/experimental/DatePicker/util/index.ts b/src/components/experimental/DatePicker/util/index.ts index ef61de88..2459d866 100644 --- a/src/components/experimental/DatePicker/util/index.ts +++ b/src/components/experimental/DatePicker/util/index.ts @@ -12,21 +12,6 @@ function isCalendarLike(v: unknown): v is CalendarLike { export function tryParse(raw: string, fmt: string, locale?: Locale): Date | null { if (!raw?.trim()) return null; - // const formatParts = fmt.replace(/[^a-zA-Z]/g, ' ').split(' ').filter(Boolean); - // const rawParts = raw.replace(/[^0-9]/g, ' ').split(' ').filter(Boolean); - - // const yearFormatIndex = formatParts.findIndex(p => p.toLowerCase().includes('y')); - - // if (yearFormatIndex !== -1) { - // const yearFormat = formatParts[yearFormatIndex]; - // if (yearFormat.length === 4 && rawParts.length === yearFormatIndex + 1) { - // const yearPart = rawParts[yearFormatIndex]; - // if (yearPart && yearPart.length > 0 && yearPart.length < 4) { - // return null; - // } - // } - // } - const p = dfParse(raw, fmt, new Date(), { locale }); if (dfIsValid(p)) return p; const loose = new Date(raw); @@ -77,10 +62,10 @@ export function dateToCalendarDate(d: Date): CalendarDate { } export function calendarDateToDate(dv: DateValue): Date { - // const d = new Date(dv.year, dv.month - 1, dv.day); - // if (dv.year < 100) { - // d.setFullYear(dv.year); - // } - // return d; - return new Date(dv.year, dv.month - 1, dv.day); + const d = new Date(dv.year, dv.month - 1, dv.day); + // `new Date()` treats 2-digit years as 19xx, `setFullYear` corrects this. + if (dv.year < 100) { + d.setFullYear(dv.year); + } + return d; } From acd82432399edf0e506049146498428210a12a78 Mon Sep 17 00:00:00 2001 From: Lizzie Lerwill Date: Tue, 20 Jan 2026 00:13:50 +0100 Subject: [PATCH 3/3] fix: remove unused line --- src/components/experimental/DatePicker/util/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/experimental/DatePicker/util/index.ts b/src/components/experimental/DatePicker/util/index.ts index 2459d866..476de696 100644 --- a/src/components/experimental/DatePicker/util/index.ts +++ b/src/components/experimental/DatePicker/util/index.ts @@ -11,7 +11,6 @@ function isCalendarLike(v: unknown): v is CalendarLike { export function tryParse(raw: string, fmt: string, locale?: Locale): Date | null { if (!raw?.trim()) return null; - const p = dfParse(raw, fmt, new Date(), { locale }); if (dfIsValid(p)) return p; const loose = new Date(raw);