( input: string, format?: string, dateParser: IDateParser = NLDParser, aliases?: DateAliasMap, )
| 19 | * @returns ParsedDate object with the result |
| 20 | */ |
| 21 | export function parseNaturalLanguageDate( |
| 22 | input: string, |
| 23 | format?: string, |
| 24 | dateParser: IDateParser = NLDParser, |
| 25 | aliases?: DateAliasMap, |
| 26 | ): ParsedDate { |
| 27 | if (!input || !input.trim()) { |
| 28 | return { |
| 29 | isValid: false, |
| 30 | error: "Empty input" |
| 31 | }; |
| 32 | } |
| 33 | |
| 34 | try { |
| 35 | const aliasMap = aliases ?? settingsStore.getState().dateAliases; |
| 36 | const normalizedInput = normalizeDateInput(input, aliasMap); |
| 37 | const parseResult = dateParser.parseDate(normalizedInput); |
| 38 | |
| 39 | if (parseResult?.moment?.isValid()) { |
| 40 | const isoString = parseResult.moment.toISOString(); |
| 41 | const formatted = format |
| 42 | ? parseResult.moment.format(format) |
| 43 | : parseResult.moment.format("YYYY-MM-DD"); |
| 44 | |
| 45 | return { |
| 46 | isValid: true, |
| 47 | isoString, |
| 48 | formatted |
| 49 | }; |
| 50 | } else { |
| 51 | return { |
| 52 | isValid: false, |
| 53 | error: "Unable to parse date" |
| 54 | }; |
| 55 | } |
| 56 | } catch (error) { |
| 57 | return { |
| 58 | isValid: false, |
| 59 | error: `Parse error: ${error instanceof Error ? error.message : "Unknown error"}` |
| 60 | }; |
| 61 | } |
| 62 | } |
| 63 | |
| 64 | /** |
| 65 | * Format an ISO date string using moment.js |
no test coverage detected