bug(MaterialLuxonAdapter): Parsing format for some text inputs fails due to iso check before format check
- 主要语言
- TypeScript
- 星标
- 25k
- 派生
- 6.8k
- 平均合并
- 1 天 8 小时
- 30 天内合并 PR
- 91
描述
### 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
贡献指南
调研方向
从 src/material-luxon-adapter/adapter/luxon-date-adapter.ts 中第 174 行附近的 parse 方法开始,并使用链接的 StackBlitz 复现,其中使用 MMyyyy 格式和 082001 输入。检查解析顺序,并验证结果显示为 08/2001,而不是 01/0820。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- angular, typescript
- 领域
- frontend
- Issue 类型
- 缺陷
- 难度
- 2/5
- 预计耗时
- 1-3 小时
- 活跃度
- 停滞
- 描述清晰度
- 描述清楚
- 新手友好度
- 48/100