35 lines
1.6 KiB
TypeScript
35 lines
1.6 KiB
TypeScript
// Two date display views used across the app:
|
|
// - Data view: `08-08-26` (dashed DD-MM-YY) — compact, tabular-friendly.
|
|
// - Human view: weekday in a badge (`Thursday`) with month/year added per requirement.
|
|
|
|
// Format a YYYY-MM-DD (or ISO) string as a compact dashed data-view date.
|
|
export function formatDDMMYY(dateStr: string | undefined): string {
|
|
if (!dateStr) return '';
|
|
const d = new Date(dateStr.slice(0, 10) + 'T00:00:00');
|
|
if (Number.isNaN(d.getTime())) return '';
|
|
const day = String(d.getDate()).padStart(2, '0');
|
|
const mon = String(d.getMonth() + 1).padStart(2, '0');
|
|
const yr = String(d.getFullYear()).slice(2);
|
|
return `${day}-${mon}-${yr}`;
|
|
}
|
|
|
|
// Human view — the weekday name ("Thursday"). Render this inside a badge.
|
|
export function formatWeekday(dateStr: string | undefined): string {
|
|
if (!dateStr) return '';
|
|
const d = new Date(dateStr.slice(0, 10) + 'T00:00:00');
|
|
if (Number.isNaN(d.getTime())) return '';
|
|
return d.toLocaleDateString('en-GB', { weekday: 'long' });
|
|
}
|
|
|
|
// Human view — weekday + short date ("Thursday 7 Aug", adds year when not the
|
|
// current one, e.g. "Thursday 7 Aug 26").
|
|
export function formatHumanDate(dateStr: string | undefined): string {
|
|
if (!dateStr) return '';
|
|
const d = new Date(dateStr.slice(0, 10) + 'T00:00:00');
|
|
if (Number.isNaN(d.getTime())) return '';
|
|
const weekday = d.toLocaleDateString('en-GB', { weekday: 'long' });
|
|
const mon = d.toLocaleDateString('en-GB', { month: 'short' });
|
|
const sameYear = d.getFullYear() === new Date().getFullYear();
|
|
return `${weekday} ${d.getDate()} ${mon}${sameYear ? '' : ' ' + String(d.getFullYear()).slice(2)}`;
|
|
}
|