summaryrefslogtreecommitdiff
path: root/std
diff options
context:
space:
mode:
authorxiaoxintang <longyan.xxt@raycloud.com>2020-12-12 21:21:48 +0800
committerGitHub <noreply@github.com>2020-12-12 14:21:48 +0100
commit89c14f79a45868c8f94eab97d794f8a27096a154 (patch)
treeebf61b6716b3b8c9069e79478b1abf53a9dbcfa6 /std
parent93cd9ab0b83e0df644315e7303ffb6280307e723 (diff)
fix(std/datetime): partsToDate (#8553)
Diffstat (limited to 'std')
-rw-r--r--std/datetime/formatter.ts25
-rw-r--r--std/datetime/mod.ts3
-rw-r--r--std/datetime/test.ts4
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),
);