angular / angular/components

bug(MaterialLuxonAdapter): Parsing format for some text inputs fails due to iso check before format check

Offen
#28,703 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
area: material/datepicker P3
Vorherrschende Sprache
TypeScript
Sterne
25k
Forks
6.8k
Ø Merge
1 T. 8 Std.
Gemergte PRs (30 T.)
91

Beschreibung

### Is this a regression?

- No

### The previous version in which this bug was not present was

N/A

### Description

In `/src/material-luxon-adapter/adapter/luxon-date-adapter.ts#L174` the date is formatted with ISO before the user provided formats.

This leads to a bug where specific text inputs are not parsing correctly according to the user provided formats.

For example, I provide the format `MMyyyy` to the parse dateInputs array. This gets ignored for certain string inputs. One example is `082001`. This gets parsed as `yyyyMM` by the ISO check before checking my provided formats array and returns incorrectly as `01/0820` instead of the desired `08/2001`.

```
parse(value: any, parseFormat: string | string[]): LuxonDateTime | null {
const iso8601Date = LuxonDateTime.fromISO(value, options);

if (this.isValid(iso8601Date)) {
return iso8601Date;
}

const formats = Array.isArray(parseFormat) ? parseFormat : [parseFormat];

if (!parseFormat.length) {
throw Error('Formats array must not be empty.');
}

for (const format of formats) {
const fromFormat = LuxonDateTime.fromFormat(value, format, options);

if (this.isValid(fromFormat)) {
return fromFormat;
}
}

...
```

### Reproduction

StackBlitz link: https://stackblitz.com/edit/ocbei5?file=package.json
Steps to reproduce:
1. provide the format `MMyyyy` to the parse dateInputs array
2. type 082001 into the date input with luxon date times and tab off to enter

### Expected Behavior

Gets parsed correctly as 08/2001 and displays as 08/2001.

### Actual Behavior

Gets parsed incorrectly by ISO check as 01/0820 and displays as 01/0820.

### Environment

- Angular: 16.0.4
- CDK/Material:
- "@angular/material": "^16.0.3",
- "@angular/material-luxon-adapter": "^16.2.4",
- Browser(s): Chrome
- Operating System: macOS

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne in src/material-luxon-adapter/adapter/luxon-date-adapter.ts bei der parse-Methode etwa in Zeile 174 und verwende die verlinkte StackBlitz-Reproduktion mit dem MMyyyy-Format und der Eingabe 082001. Überprüfe die Parsing-Reihenfolge und verifiziere, dass das Ergebnis als 08/2001 und nicht als 01/0820 angezeigt wird.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
angular, typescript
Bereich
frontend
Issue-Typ
Bug
Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Aktivitätsstatus
Veraltet
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
48/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.