Validate and return calendar parts, or undefined if invalid
(parts: DateParts)
| 63 | |
| 64 | /** Validate and return calendar parts, or undefined if invalid */ |
| 65 | function validParts(parts: DateParts): { year: number; month: number; day: number } | undefined { |
| 66 | const { year, month, day } = parse(parts); |
| 67 | if (!year || year < 0 || year > 9999) return undefined; |
| 68 | if (!month || month < 1 || month > 12) return undefined; |
| 69 | if (!day || day < 1) return undefined; |
| 70 | const d = new Date(Date.UTC(year, month - 1, day)); |
| 71 | if (d.getUTCFullYear() !== year || d.getUTCMonth() !== month - 1 || d.getUTCDate() !== day) |
| 72 | return undefined; |
| 73 | return { year, month, day }; |
| 74 | } |
| 75 | |
| 76 | function toDate(parts: DateParts): Date | undefined { |
| 77 | const p = validParts(parts); |