summaryrefslogtreecommitdiff
path: root/std/datetime/formatter.ts
diff options
context:
space:
mode:
Diffstat (limited to 'std/datetime/formatter.ts')
-rw-r--r--std/datetime/formatter.ts25
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);
}
}