Files
ln-bi/src/modules/mileage/monitoring/date-range.ts
T

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) };
}