You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// dateUtils.ts
/** * 日期格式化函数 * @param timestamp - 时间戳(支持秒或毫秒),字符串,或Date对象 * @param format - 格式化字符串,例如:'YYYY-MM-DD HH:mm:ss' * @returns 格式化后的日期字符串 */ export function formatDate( timestamp: number | string | Date, format: string = 'YYYY-MM-DD HH:mm:ss' ): string { if (!timestamp) return '';
let date: Date;
// 处理不同类型的输入
if (timestamp instanceof Date) { date = timestamp; } else { let tsNumber = Number(timestamp); if (isNaN(tsNumber)) { console.error('Invalid timestamp:', timestamp); return ''; }
// 判断时间戳是秒还是毫秒级别
if (String(Math.floor(tsNumber)).length === 10) { tsNumber *= 1000; // 秒级时间戳转毫秒
}
date = new Date(tsNumber); }
if (isNaN(date.getTime())) { console.error('Invalid date:', date); return ''; }
const map: { [key in 'YYYY' | 'MM' | 'DD' | 'HH' | 'mm' | 'ss']: string } = { YYYY: date.getFullYear().toString(), MM: ('0' + (date.getMonth() + 1)).slice(-2), DD: ('0' + date.getDate()).slice(-2), HH: ('0' + date.getHours()).slice(-2), mm: ('0' + date.getMinutes()).slice(-2), ss: ('0' + date.getSeconds()).slice(-2), };
// 使用正则替换格式字符串中的标记
const formattedDate = format.replace(/YYYY|MM|DD|HH|mm|ss/g, (pattern) => { return map[pattern as keyof typeof map]; });
return formattedDate; }
|