fix: 删除重复类
parent
95096ef6e6
commit
966c25ba6e
@ -0,0 +1,61 @@
|
||||
const pad = (value: number): string => String(value).padStart(2, '0');
|
||||
|
||||
const formatDateTime = (date: Date): string =>
|
||||
`${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`;
|
||||
|
||||
const normalizeDate = (value: string | Date): Date => {
|
||||
const date = value instanceof Date ? new Date(value) : new Date(String(value).replace(/-/g, '/'));
|
||||
return Number.isNaN(date.getTime()) ? new Date() : date;
|
||||
};
|
||||
|
||||
const iterateDates = (start: Date, end: Date, stepper: (date: Date) => void): string[] => {
|
||||
const result: string[] = [];
|
||||
const cursor = new Date(start);
|
||||
|
||||
while (cursor.getTime() <= end.getTime()) {
|
||||
result.push(formatDateTime(cursor));
|
||||
stepper(cursor);
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
export const getHoursBetween = (startTime: string | Date, endTime: string | Date): string[] => {
|
||||
const start = normalizeDate(startTime);
|
||||
const end = normalizeDate(endTime);
|
||||
start.setMinutes(0, 0, 0);
|
||||
end.setMinutes(0, 0, 0);
|
||||
|
||||
return iterateDates(start, end, (date) => date.setHours(date.getHours() + 1));
|
||||
};
|
||||
|
||||
export const getDatesBetween = (startTime: string | Date, endTime: string | Date): string[] => {
|
||||
const start = normalizeDate(startTime);
|
||||
const end = normalizeDate(endTime);
|
||||
start.setHours(0, 0, 0, 0);
|
||||
end.setHours(0, 0, 0, 0);
|
||||
|
||||
return iterateDates(start, end, (date) => date.setDate(date.getDate() + 1));
|
||||
};
|
||||
|
||||
export const getMonthsBetween = (startTime: string | Date, endTime: string | Date): string[] => {
|
||||
const start = normalizeDate(startTime);
|
||||
const end = normalizeDate(endTime);
|
||||
start.setDate(1);
|
||||
start.setHours(0, 0, 0, 0);
|
||||
end.setDate(1);
|
||||
end.setHours(0, 0, 0, 0);
|
||||
|
||||
return iterateDates(start, end, (date) => date.setMonth(date.getMonth() + 1));
|
||||
};
|
||||
|
||||
export const getYearsBetween = (startTime: string | Date, endTime: string | Date): string[] => {
|
||||
const start = normalizeDate(startTime);
|
||||
const end = normalizeDate(endTime);
|
||||
start.setMonth(0, 1);
|
||||
start.setHours(0, 0, 0, 0);
|
||||
end.setMonth(0, 1);
|
||||
end.setHours(0, 0, 0, 0);
|
||||
|
||||
return iterateDates(start, end, (date) => date.setFullYear(date.getFullYear() + 1));
|
||||
};
|
||||
Loading…
Reference in New Issue