diff --git a/src/regex.ts b/src/regex.ts index 7ee6208..6a00780 100644 --- a/src/regex.ts +++ b/src/regex.ts @@ -675,7 +675,11 @@ export const timeUnitTokenRegex = createRegex() .endGroup() .anyOf("\t ").zeroOrMore() .startCaptureGroup() - .letter().oneOrMore() + .startGroup() + .unicodeChar() + .or() + .unicodeSymbol() + .endGroup().oneOrMore() .endGroup() .global() .toRegExp(); diff --git a/src/utils/time.ts b/src/utils/time.ts index 1fdbe22..5077dfd 100644 --- a/src/utils/time.ts +++ b/src/utils/time.ts @@ -20,17 +20,22 @@ const timeUnitToMinutes: Record = { seconds: 1 / 60, seconde: 1 / 60, secondes: 1 / 60, + 秒: 1 / 60, // minutes m: 1, min: 1, minute: 1, minutes: 1, + 分: 1, + 分間: 1, // hours h: 60, hour: 60, hours: 60, heure: 60, heures: 60, + 時: 60, + 時間: 60, // days d: 1440, day: 1440, @@ -38,6 +43,8 @@ const timeUnitToMinutes: Record = { j: 1440, jour: 1440, jours: 1440, + 日: 1440, + 日間: 1440, }; /** diff --git a/test/utils_time.test.ts b/test/utils_time.test.ts index d190978..c807ae9 100644 --- a/test/utils_time.test.ts +++ b/test/utils_time.test.ts @@ -115,6 +115,22 @@ describe("parseTimeToMinutes", () => { expect(parseTimeToMinutes("2 jours")).toBe(2880); }); + it("handles Japanese time units", () => { + expect(parseTimeToMinutes("30秒")).toBe(1); + expect(parseTimeToMinutes("45 秒")).toBe(1); + expect(parseTimeToMinutes("30分")).toBe(30); + expect(parseTimeToMinutes("30 分間")).toBe(30); + expect(parseTimeToMinutes("1時間")).toBe(60); + expect(parseTimeToMinutes("2 時")).toBe(120); + expect(parseTimeToMinutes("1日")).toBe(1440); + expect(parseTimeToMinutes("2 日間")).toBe(2880); + }); + + it("parses multiple space-separated Japanese pairs", () => { + expect(parseTimeToMinutes("1時間 30分")).toBe(90); + expect(parseTimeToMinutes("1日 2時間 30分")).toBe(1590); + }); + it("handles all second aliases", () => { expect(parseTimeToMinutes("60 s")).toBe(1); expect(parseTimeToMinutes("60 sec")).toBe(1);