30 lines
885 B
TypeScript
30 lines
885 B
TypeScript
import type {DateISO} from "@/types/DateISO"
|
|
import type {DateKebab} from "@/types/DateKebab"
|
|
|
|
export function parseDateProp(kebabDate: DateKebab | undefined): string | undefined {
|
|
try {
|
|
|
|
if (!kebabDate) {
|
|
throw new Error('No value')
|
|
}
|
|
const dateValues = kebabDate.split('-')
|
|
const [, monthString, dateString] = dateValues
|
|
const [year, month, date] = dateValues.map(val => Number(val))
|
|
const dateValuesAreValid = (
|
|
!Number.isNaN(year) &&
|
|
monthString.length >= 1 && monthString.length <= 2 &&
|
|
!Number.isNaN(month) &&
|
|
month >= 1 && month <= 12 &&
|
|
dateString.length >= 1 && dateString.length <= 31 &&
|
|
!Number.isNaN(date) &&
|
|
date >= 1 && date <= 31
|
|
)
|
|
if (!dateValuesAreValid) {
|
|
throw new Error('Invalid date values')
|
|
}
|
|
return new Date(year, month, date).toISOString() as DateISO
|
|
} catch(e) {
|
|
// ignore nonsense route queries
|
|
return
|
|
}
|
|
} |