diff options
Diffstat (limited to 'std/datetime/formatter.ts')
-rw-r--r-- | std/datetime/formatter.ts | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/std/datetime/formatter.ts b/std/datetime/formatter.ts index 8b9c9d9b0..ea16dbe0d 100644 --- a/std/datetime/formatter.ts +++ b/std/datetime/formatter.ts @@ -511,6 +511,28 @@ export class DateTimeFormatter { return parts; } + /** sort & filter dateTimeFormatPart */ + sortDateTimeFormatPart(parts: DateTimeFormatPart[]): DateTimeFormatPart[] { + let result: DateTimeFormatPart[] = []; + const typeArray = [ + "year", + "month", + "day", + "hour", + "minute", + "second", + "fractionalSecond", + ]; + for (const type of typeArray) { + const current = parts.findIndex((el) => el.type === type); + if (current !== -1) { + result = result.concat(parts.splice(current, 1)); + } + } + result = result.concat(parts); + return result; + } + partsToDate(parts: DateTimeFormatPart[]): Date { const date = new Date(); const utc = parts.find( @@ -566,6 +588,7 @@ export class DateTimeFormatter { parse(string: string): Date { const parts = this.parseToParts(string); - return this.partsToDate(parts); + const sortParts = this.sortDateTimeFormatPart(parts); + return this.partsToDate(sortParts); } } |