Skip to content

Commit 813c240

Browse files
refactor(date-time.util): make sure single digit masks are parsed properly
1 parent 778985c commit 813c240

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

projects/igniteui-angular/src/lib/date-common/util/date-time.util.spec.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,22 @@ describe(`DateTimeUtil Unit tests`, () => {
3636
expect(resDict[DatePart.Date]).toEqual(jasmine.objectContaining({ start: 3, end: 5 }));
3737
expect(resDict[DatePart.Year]).toEqual(jasmine.objectContaining({ start: 6, end: 10 }));
3838

39+
// M/d/yy should be 00/00/00
3940
result = DateTimeUtil.parseDateTimeFormat('M/d/yy');
4041
resDict = reduceToDictionary(result);
4142
expect(result.length).toEqual(5);
4243
expect(resDict[DatePart.Month]).toEqual(jasmine.objectContaining({ start: 0, end: 2 }));
4344
expect(resDict[DatePart.Date]).toEqual(jasmine.objectContaining({ start: 3, end: 5 }));
4445
expect(resDict[DatePart.Year]).toEqual(jasmine.objectContaining({ start: 6, end: 8 }));
4546

47+
// H:m:s should be 00:00:00
48+
result = DateTimeUtil.parseDateTimeFormat('H:m:s');
49+
resDict = reduceToDictionary(result);
50+
expect(result.length).toEqual(5);
51+
expect(resDict[DatePart.Hours]).toEqual(jasmine.objectContaining({start: 0, end: 2 }));
52+
expect(resDict[DatePart.Minutes]).toEqual(jasmine.objectContaining({start: 3, end: 5 }));
53+
expect(resDict[DatePart.Seconds]).toEqual(jasmine.objectContaining({start: 6, end: 8 }));
54+
4655
result = DateTimeUtil.parseDateTimeFormat('dd.MM.yyyy г.');
4756
resDict = reduceToDictionary(result);
4857
expect(result.length).toEqual(6);

projects/igniteui-angular/src/lib/date-common/util/date-time.util.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { DatePart, DatePartInfo } from '../../directives/date-time-editor/date-t
22
import { formatDate, FormatWidth, getLocaleDateFormat } from '@angular/common';
33
import { ValidationErrors } from '@angular/forms';
44
import { isDate } from '../../core/utils';
5-
import { MaskParsingService } from '../../directives/mask/mask-parsing.service';
65

76
/** @hidden */
87
const enum FormatDesc {
@@ -89,10 +88,8 @@ export abstract class DateTimeUtil {
8988
}
9089
}
9190

92-
DateTimeUtil.ensureLeadingZero(currentPart);
93-
currentPart.end = currentPart.start + currentPart.format.length;
91+
DateTimeUtil.addCurrentPart(currentPart, dateTimeParts);
9492
position = currentPart.end;
95-
dateTimeParts.push(currentPart);
9693
}
9794

9895
currentPart = {
@@ -103,6 +100,11 @@ export abstract class DateTimeUtil {
103100
};
104101
}
105102

103+
// make sure the last member of a format like H:m:s is not omitted
104+
if (!dateTimeParts.filter(p => p.format.includes(currentPart.format)).length) {
105+
DateTimeUtil.addCurrentPart(currentPart, dateTimeParts);
106+
}
107+
106108
return dateTimeParts;
107109
}
108110

@@ -420,6 +422,12 @@ export abstract class DateTimeUtil {
420422
return false;
421423
}
422424

425+
private static addCurrentPart(currentPart: DatePartInfo, dateTimeParts: DatePartInfo[]): void {
426+
DateTimeUtil.ensureLeadingZero(currentPart);
427+
currentPart.end = currentPart.start + currentPart.format.length;
428+
dateTimeParts.push(currentPart);
429+
}
430+
423431
private static daysInMonth(fullYear: number, month: number): number {
424432
return new Date(fullYear, month + 1, 0).getDate();
425433
}

0 commit comments

Comments
 (0)