diff --git a/desktop/src/lib/dates.ts b/desktop/src/lib/dates.ts new file mode 100644 index 0000000..1b2b73d --- /dev/null +++ b/desktop/src/lib/dates.ts @@ -0,0 +1,50 @@ +const DAY_NAMES = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] +const MONTH_NAMES = [ + 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', + 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', +] + +function pad2(n: number): string { + return n < 10 ? `0${n}` : String(n) +} + +export function todayKey(): string { + return formatDateKey(new Date()) +} + +export function formatDateKey(d: Date): string { + return `${d.getUTCFullYear()}-${pad2(d.getUTCMonth() + 1)}-${pad2(d.getUTCDate())}` +} + +export function addDays(d: Date, n: number): Date { + const r = new Date(d.getTime()) + r.setUTCDate(r.getUTCDate() + n) + return r +} + +export function startOfDay(d: Date): Date { + return new Date(Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate())) +} + +export function prettyDate(ymd: string): string { + const [y, m, d] = ymd.split('-').map(Number) + const dt = new Date(Date.UTC(y, m - 1, d)) + return `${DAY_NAMES[dt.getUTCDay()]} ${MONTH_NAMES[dt.getUTCMonth()]} ${dt.getUTCDate()}` +} + +export function shortDate(ymd: string): string { + const parts = ymd.split('-') + return `${parts[1]}/${parts[2]}` +} + +export function firstOfMonth(d: Date): Date { + return new Date(Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), 1)) +} + +export function daysInMonth(d: Date): number { + return new Date(Date.UTC(d.getUTCFullYear(), d.getUTCMonth() + 1, 0)).getUTCDate() +} + +export function dayOfMonth(d: Date): number { + return d.getUTCDate() +}