From b48c434266a6c1458f5c3f0ec3ebcc7bc9009608 Mon Sep 17 00:00:00 2001 From: Se1foo <158568413+Se1foo@users.noreply.github.com> Date: Sun, 2 Aug 2026 14:33:01 +0100 Subject: [PATCH] Fix: parse unpadded yyyy-mm-dd date input regardless of locale (#13501) --- .../src/app/utils/ngb-date-parser-formatter.spec.ts | 13 +++++++++++++ src-ui/src/app/utils/ngb-date-parser-formatter.ts | 10 +++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src-ui/src/app/utils/ngb-date-parser-formatter.spec.ts b/src-ui/src/app/utils/ngb-date-parser-formatter.spec.ts index 10f27d70b..79952c996 100644 --- a/src-ui/src/app/utils/ngb-date-parser-formatter.spec.ts +++ b/src-ui/src/app/utils/ngb-date-parser-formatter.spec.ts @@ -57,6 +57,19 @@ describe('LocalizedDateParserFormatter', () => { expect(val).toEqual({ day: 4, month: 5, year: 2023 }) }) + it('should parse yyyy-mm-dd input with unpadded month or day by locale', () => { + let val = dateParserFormatter.parse('2023-5-4') + expect(val).toEqual({ day: 4, month: 5, year: 2023 }) + + settingsService.setLanguage('de-de') // dd.mm.yyyy + val = dateParserFormatter.parse('2023-5-4') + expect(val).toEqual({ day: 4, month: 5, year: 2023 }) + + settingsService.setLanguage('tr-tr') // yyyy-mm-dd + val = dateParserFormatter.parse('2023-5-4') + expect(val).toEqual({ day: 4, month: 5, year: 2023 }) + }) + it('should parse date struct to string by locale', () => { const dateStruct = { day: 4, diff --git a/src-ui/src/app/utils/ngb-date-parser-formatter.ts b/src-ui/src/app/utils/ngb-date-parser-formatter.ts index 48806a80a..aab5c6734 100644 --- a/src-ui/src/app/utils/ngb-date-parser-formatter.ts +++ b/src-ui/src/app/utils/ngb-date-parser-formatter.ts @@ -52,15 +52,11 @@ export class LocalizedDateParserFormatter extends NgbDateParserFormatter { let segments = value.split(this.separatorRegExp) // always accept strict yyyy*mm*dd format even if that's not the input format since we can be certain its not yyyy*dd*mm - if ( - value.length == 10 && - segments.length == 3 && - segments[0].length == 4 - ) { + if (segments.length == 3 && segments[0].length == 4) { return inputFormat .replace('yyyy', segments[0]) - .replace('mm', segments[1]) - .replace('dd', segments[2]) + .replace('mm', segments[1].padStart(2, '0')) + .replace('dd', segments[2].padStart(2, '0')) } else { // otherwise pad & re-join without separator value = segments.map((segment) => segment.padStart(2, '0')).join('')