Skip to main content

时间日期

返回逐时时间轴

/**
* 生成时间轴列表
* @param startTimeStr 开始时间字符串(格式:'YYYY-MM-DD HH:mm:ss')
* @param endTimeStr 结束时间字符串(格式:'YYYY-MM-DD HH:mm:ss')
* @param stepMs 步长(毫秒,默认 1 小时)
* @returns 时间字符串数组(格式:'YYYY-MM-DD HH:mm:ss')
*/
function generateTimeAxis(startTimeStr: string, endTimeStr: string, stepMs: number = 3600000): string[] {
// 解析日期字符串为 Date 对象
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);
};

// 格式化 Date 对象为字符串
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); // 输出包含 217 个时间点的数组

const halfHourList = generateTimeAxis(
'2023-01-01 00:00:00',
'2023-01-01 02:00:00',
3600000 // 60 分钟
);