/** * 时刻的摆法 —— **屏上一律本地时刻**。 * * 后端存的是 UTC ISO 串。从前满屏都是 `at.slice(5, 16).replace('T', ' ')` —— * 把 UTC 那八个字符直接摆上去,于是**每一个时刻都差着时区**: * 一封 08-01 04:18 到的信,工单上写着「派发 07-31 20:18」,对话气泡写着「20:18」。 * 差八小时的时刻比没有时刻更坏 —— 它看起来像一个可信的事实,人拿它去核 SLA、 * 去跟客户对「我们几点收到的」,一核一个错(实测在来件那一行栽过一次)。 * * 只做一件事:ISO → 本地。**不做「几分钟前」这类相对时间** —— * 相对时间读着舒服,可它随打开的时刻变,截图发给同事就对不上了。 */ const two = (n: number): string => String(n).padStart(2, '0'); /** `月-日 时:分` —— 工单、气泡、日志里那一小行 */ export function atMinute(iso: string): string { const at = new Date(iso); if (Number.isNaN(at.getTime())) return ''; return `${two(at.getMonth() + 1)}-${two(at.getDate())} ${two(at.getHours())}:${two(at.getMinutes())}`; } /** `时:分` —— 同一天之内的密集条目(对话流) */ export function atClock(iso: string): string { const at = new Date(iso); if (Number.isNaN(at.getTime())) return ''; return `${two(at.getHours())}:${two(at.getMinutes())}`; } /** `年-月-日 时:分` —— 详情页那种要说清哪一天的地方 */ export function atFull(iso: string): string { const at = new Date(iso); if (Number.isNaN(at.getTime())) return ''; return `${at.getFullYear()}-${two(at.getMonth() + 1)}-${two(at.getDate())} ${two(at.getHours())}:${two(at.getMinutes())}`; }