interface IChatTimeProps { msgtime: string; } export const ChatTime: React.FC = (props) => { function padWith(value: string | number) { return `${value}`.padStart(2, '0'); } const weekStr = ['日', '一', '二', '三', '四', '五', '六']; const formatTime = () => { const now = new Date(); const msgtime = new Date(props.msgtime); const yesterday = new Date(); yesterday.setDate(yesterday.getDate() - 1); const dayDiff = (new Date( `${now.getFullYear()}-${padWith(now.getMonth() + 1)}-${padWith(now.getDate())} 00:00:00`, ).getTime() - new Date(props.msgtime).getTime()) / (24 * 60 * 60 * 1000) + 1; if (now.getFullYear() == msgtime.getFullYear()) { if ( now.getFullYear() == msgtime.getFullYear() && now.getMonth() == msgtime.getMonth() && now.getDate() == msgtime.getDate() ) { // 当天 return `${padWith(msgtime.getHours())}:${padWith(msgtime.getMinutes())}`; } else if ( yesterday.getFullYear() == msgtime.getFullYear() && yesterday.getMonth() == msgtime.getMonth() && yesterday.getDate() == msgtime.getDate() ) { // 昨天 return `昨天 ${padWith(msgtime.getHours())}:${padWith(msgtime.getMinutes())}`; } else if (dayDiff < 7) { // 星期 return `星期${weekStr[msgtime.getDay()]} ${padWith(msgtime.getHours())}:${padWith( msgtime.getMinutes(), )}`; } else { // 超过7天 return `${padWith(msgtime.getMonth() + 1)}月${padWith(msgtime.getDate())}日 ${padWith( msgtime.getHours(), )}:${padWith(msgtime.getMinutes())}`; } } else { // 跨年 return `${msgtime.getFullYear()}年${padWith(msgtime.getMonth() + 1)}月${padWith( msgtime.getDate(), )}日 ${padWith(msgtime.getHours())}:${padWith(msgtime.getMinutes())}`; } }; return (
{formatTime()}
); };