32 lines
846 B
TypeScript
32 lines
846 B
TypeScript
|
|
/**
|
||
|
|
* Formats a PocketBase date string into a localized year string or "Present".
|
||
|
|
* @throws {Error} if any date is invalid or if the range is logically impossible.
|
||
|
|
*/
|
||
|
|
export function formatYearRange(start: string, end: string | null): string {
|
||
|
|
const startDate = new Date(start);
|
||
|
|
if (Number.isNaN(startDate.getTime())) {
|
||
|
|
throw new Error('Invalid start date');
|
||
|
|
}
|
||
|
|
const startYear = startDate.getFullYear();
|
||
|
|
|
||
|
|
if (end === null) {
|
||
|
|
return `${startYear} — Present`;
|
||
|
|
}
|
||
|
|
|
||
|
|
const endDate = new Date(end);
|
||
|
|
if (Number.isNaN(endDate.getTime())) {
|
||
|
|
throw new Error('Invalid end date');
|
||
|
|
}
|
||
|
|
const endYear = endDate.getFullYear();
|
||
|
|
|
||
|
|
if (startYear > endYear) {
|
||
|
|
throw new Error('Start year cannot be after end year');
|
||
|
|
}
|
||
|
|
|
||
|
|
if (startYear === endYear) {
|
||
|
|
return `${startYear}`;
|
||
|
|
}
|
||
|
|
|
||
|
|
return `${startYear} — ${endYear}`;
|
||
|
|
}
|