跟进时间格式化
灵感:能力工具箱 luxon-dt(Luxon 时区友好的跟进时间格式化)。
> 小四原创:ISO/时间戳 → DateTime → 本地展示串。
> 无效时间回落 —。
何时使用
- 跟进列表「下次跟进」列
- 跨时区 Demo 展示统一上海时区
- 相对今天的简短日期
硬约束
- 依赖:
luxon。 - 默认时区可用
Asia/Shanghai(可配置)。 - 无效输入不得抛未捕获异常。
- 实现要点注释标 小四原创。
- 不做完整日程冲突引擎(见 ICS/rrule 等另 Skill)。
推荐实现
import { DateTime } from 'luxon'
const ZONE = 'Asia/Shanghai'
// 小四原创:跟进时间 → 可读串
export function formatFollowAt(
input: string | number | Date | null | undefined,
fmt = 'yyyy-LL-dd HH:mm',
zone = ZONE,
): string {
if (input == null || input === '') return '—'
let dt: DateTime
if (typeof input === 'number') {
dt = DateTime.fromMillis(input, { zone })
} else if (input instanceof Date) {
dt = DateTime.fromJSDate(input, { zone })
} else {
dt = DateTime.fromISO(String(input), { zone })
if (!dt.isValid) dt = DateTime.fromSQL(String(input), { zone })
}
if (!dt.isValid) return '—'
return dt.setZone(zone).toFormat(fmt)
}
export function parseFollowAt(
input: string,
zone = ZONE,
): DateTime | null {
const dt = DateTime.fromISO(input, { zone })
return dt.isValid ? dt : null
}
Agent 步骤
npm i luxon(按需@types/luxon)。- 列表/详情用
formatFollowAt。 - 自测:ISO 与毫秒时间戳均可格式化;坏字符串 →
—。
不要做
- 用
new Date().toString()糊弄时区却声称已用 Luxon。 - 混用本地与 UTC 展示且不说明。
附加
- README.md · reference.md · templates/usage.md