diff options
author | xiaoxintang <longyan.xxt@raycloud.com> | 2020-12-12 21:21:48 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-12 14:21:48 +0100 |
commit | 89c14f79a45868c8f94eab97d794f8a27096a154 (patch) | |
tree | ebf61b6716b3b8c9069e79478b1abf53a9dbcfa6 /std/datetime | |
parent | 93cd9ab0b83e0df644315e7303ffb6280307e723 (diff) |
fix(std/datetime): partsToDate (#8553)
Diffstat (limited to 'std/datetime')
-rw-r--r-- | std/datetime/formatter.ts | 25 | ||||
-rw-r--r-- | std/datetime/mod.ts | 3 | ||||
-rw-r--r-- | std/datetime/test.ts | 4 |
3 files changed, 30 insertions, 2 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); } } diff --git a/std/datetime/mod.ts b/std/datetime/mod.ts index 72f8cc681..1f117350c 100644 --- a/std/datetime/mod.ts +++ b/std/datetime/mod.ts @@ -28,7 +28,8 @@ enum Day { export function parse(dateString: string, formatString: string): Date { const formatter = new DateTimeFormatter(formatString); const parts = formatter.parseToParts(dateString); - return formatter.partsToDate(parts); + const sortParts = formatter.sortDateTimeFormatPart(parts); + return formatter.partsToDate(sortParts); } /** diff --git a/std/datetime/test.ts b/std/datetime/test.ts index 0ff70603d..1b80edd56 100644 --- a/std/datetime/test.ts +++ b/std/datetime/test.ts @@ -54,6 +54,10 @@ Deno.test({ new Date(2019, 0, 3), ); assertEquals( + datetime.parse("31-10-2019", "dd-MM-yyyy"), + new Date(2019, 9, 31), + ); + assertEquals( datetime.parse("2019-01-03", "yyyy-MM-dd"), new Date(2019, 0, 3), ); |