import type { DateRange } from './types'; export const startOfLocalDay = (date: Date): Date => { const nextDate = new Date(date); nextDate.setHours(0, 0, 0, 0); return nextDate; }; export const endOfLocalDay = (date: Date): Date => { const nextDate = new Date(date); nextDate.setHours(23, 59, 59, 999); return nextDate; }; export const rangeForDay = (date: Date): DateRange => ({ start: startOfLocalDay(date), end: endOfLocalDay(date), }); export const rangeForLastDays = (days: number, today = new Date()): DateRange => { const end = endOfLocalDay(today); const start = startOfLocalDay(today); start.setDate(start.getDate() - Math.max(days - 1, 0)); return { start, end }; }; export const rangeForPreviousDay = (today = new Date()): DateRange => { const date = startOfLocalDay(today); date.setDate(date.getDate() - 1); return rangeForDay(date); }; export const parseLocalDateInput = (value: string): Date | null => { if (!value) return null; const match = value.match(/^(\d{4})-(\d{2})-(\d{2})$/); if (!match) return null; const [, yearValue, monthValue, dayValue] = match; const date = new Date(Number(yearValue), Number(monthValue) - 1, Number(dayValue)); if ( date.getFullYear() !== Number(yearValue) || date.getMonth() !== Number(monthValue) - 1 || date.getDate() !== Number(dayValue) ) { return null; } return date; }; export const formatDateParam = (date: Date): string => { const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); return `${year}-${month}-${day}`; };