function generateTimeAxis(startTimeStr: string, endTimeStr: string, stepMs: number = 3600000): string[] {
const parseDateTime = (str: string): Date => {
const [datePart, timePart] = str.split(' ');
const [year, month, day] = datePart.split('-').map(Number);
const [hours, minutes, seconds] = timePart.split(':').map(Number);
return new Date(year, month - 1, day, hours, minutes, seconds);
};
const formatDate = (date: Date): string => {
const pad = (n: number) => n.toString().padStart(2, '0');
return (
`${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ` +
`${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`
);
};
const start = parseDateTime(startTimeStr);
const end = parseDateTime(endTimeStr);
if (isNaN(start.getTime()) || isNaN(end.getTime())) {
throw new Error('Invalid date format');
}
if (start > end) return [];
if (stepMs <= 0) throw new Error('Step must be positive');
const result: string[] = [];
let current = start.getTime();
const endTime = end.getTime();
while (current <= endTime) {
result.push(formatDate(new Date(current)));
current += stepMs;
}
return result;
}
const timeList = generateTimeAxis('2020-06-16 00:00:00', '2020-06-25 00:00:00');
console.log(timeList);
const halfHourList = generateTimeAxis(
'2023-01-01 00:00:00',
'2023-01-01 02:00:00',
3600000
);