46 lines
1.5 KiB
TypeScript
46 lines
1.5 KiB
TypeScript
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) };
|
|
}
|