40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
export function normalizeDateString(dateString: string): string {
|
|
let [day, month, year] = dateString.split('/')
|
|
if (!year) {
|
|
;[day, month, year] = ['01', day, month]
|
|
}
|
|
return normalizeDate(+year, +month, +day)
|
|
}
|
|
const pad = (n: number): string => (+n < 10 ? `0${n}` : '' + n)
|
|
export function normalizeDate(
|
|
year: number,
|
|
month: number,
|
|
day: number
|
|
): string {
|
|
const date = new Date(+year, +month - 1, +day)
|
|
if (!+date || date.getDate() !== +day) {
|
|
throw new SyntaxError(`La date ${day}/${month}/${year} n'est pas valide`)
|
|
}
|
|
return `${pad(day)}/${pad(month)}/${pad(year)}`
|
|
}
|
|
|
|
const dateRegexp = /[\d]{2}\/[\d]{2}\/[\d]{4}/
|
|
export function convertToDate(value: string): Date {
|
|
const [day, month, year] = normalizeDateString(value).split('/')
|
|
return new Date(+year, +month - 1, +day)
|
|
}
|
|
export function convertToDateIfNeeded(...values: string[]) {
|
|
const dateStrings = values.map(dateString => '' + dateString)
|
|
if (!dateStrings.some(dateString => dateString.match(dateRegexp))) {
|
|
return values
|
|
}
|
|
dateStrings.forEach(dateString => {
|
|
if (!dateString.match(dateRegexp)) {
|
|
throw new TypeError(
|
|
`'${dateString}' n'est pas une date valide (format attendu: mm/aaaa ou jj/mm/aaaa)`
|
|
)
|
|
}
|
|
})
|
|
return dateStrings.map(convertToDate)
|
|
}
|