export type RangePreset = 'today' | 'yesterday' | 'thisWeek' | 'thisMonth' | 'last7' | 'last15'; function formatLocalDate(date: Date): string { return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`; } /** * The monitoring day rolls over at 05:00 local time. Before then the dashboard * continues to use the previous calendar day, matching the existing UI rule. */ export function defaultMileageDate(now = new Date()): string { const date = new Date(now); if (date.getHours() < 5) date.setDate(date.getDate() - 1); return formatLocalDate(date); } export function normalizeRangeLabel(start: string, end: string): string { if (!start && !end) return '最新数据'; if (start && end && start === end) return start; return `${start || end} 至 ${end || start}`; } export function getRangePreset( preset: RangePreset, now = new Date(), ): { start: string; end: string } { const end = new Date(`${defaultMileageDate(now)}T00:00:00`); const start = new Date(end); if (preset === 'yesterday') { start.setDate(start.getDate() - 1); end.setDate(end.getDate() - 1); } else if (preset === 'thisWeek') { const day = start.getDay() || 7; start.setDate(start.getDate() - day + 1); } else if (preset === 'thisMonth') { start.setDate(1); } else if (preset === 'last7') { start.setDate(start.getDate() - 6); } else if (preset === 'last15') { start.setDate(start.getDate() - 14); } return { start: formatLocalDate(start), end: formatLocalDate(end) }; }