import type { RangePreset } from './types' import { previousDate } from './dashboardNavigation' import { validateCustomRange } from './state' export const overviewRangeOptions: { value: RangePreset; label: string }[] = [3, 7, 15, 30].map(days => ({ value: `LAST_${days}_DAYS` as RangePreset, label: `最近${days}天` })).concat([{ value: 'CUSTOM', label: '自定义' }]) export function beijingDate(now: number) { return new Intl.DateTimeFormat('sv-SE', { timeZone: 'Asia/Shanghai', year: 'numeric', month: '2-digit', day: '2-digit' }).format(now) } export function overviewRange(preset: RangePreset, anchor: string, start = '', end = '') { const yesterday = previousDate(anchor) if (preset === 'CUSTOM') { const problem = validateCustomRange(start, end) if (problem) throw new Error(problem) if (end > yesterday) throw new Error('仅查询已结束的自然日,结束日期最晚为昨日') } else { end = yesterday const day = new Date(`${anchor}T00:00:00Z`) const windows: Partial> = { LAST_3_DAYS: 3, LAST_7_DAYS: 7, LAST_15_DAYS: 15, LAST_30_DAYS: 30 } const days = windows[preset] if (!days) throw new Error('请选择有效的统计时间范围') day.setUTCDate(day.getUTCDate() - days) start = day.toISOString().slice(0, 10) if (start > end) throw new Error('当前周期还没有已结束的自然日,请选择其他时间范围') } return { rangePreset: 'CUSTOM' as const, startDate: start, endDate: end } }