Date(/date 入口)
ts
import { dayjsInit, utcToApproximate, utcToDetailed } from '@tripo3d/utils/date';
// 业务侧需要在使用前手动调一次,以注册 utc / timezone 插件
dayjsInit();/date 子入口提供三个工具:dayjsInit() 用来给 dayjs 注册 utc 与 timezone 插件,配合两个常用的 UTC 字符串格式化函数 utcToDetailed 与 utcToApproximate。
没有默认导出
/date 子入口不导出 dayjs 实例本体。如果你想直接用 dayjs,请从 dayjs 包 import:
ts
import dayjs from 'dayjs';(dayjs 是 @tripo3d/utils 的 peer dependency,宿主工程已经装了)
dayjsInit
| 函数 | 签名 | 说明 |
|---|---|---|
dayjsInit | () => void | 给 dayjs 注册 utc + timezone 插件。业务侧需要在使用前手动调一次(早期推荐在 app 入口调) |
ts
import { dayjsInit } from '@tripo3d/utils/date';
dayjsInit();没有 zh-CN locale
/date 子入口只注册 utc / timezone 插件,不预装中文 locale。需要中文展示请在宿主工程自行 dayjs.locale('zh-cn')。
utcToDetailed / utcToApproximate
针对 Tripo 后端常用的 UTC 时间字符串/时间戳的两个预设格式化:
| 函数 | 签名 | 说明 |
|---|---|---|
utcToDetailed | (utcTimeString: number | string) => string | 完整时间格式 YYYY-MM-DD HH:mm:ss,适合日志、详情页 |
utcToApproximate | (utcTimeString: number) => string | 简短格式 MM-DD HH:mm,适合列表页摘要 |
ts
import { utcToApproximate, utcToDetailed } from '@tripo3d/utils/date';
utcToDetailed('2026-04-25T10:30:45Z'); // '2026-04-25 18:30:45'(本地时区)
utcToDetailed(1714040445000); // 同上,接受 ms 时间戳
utcToApproximate(1714040445000); // '04-25 18:30'两个函数都按宿主本地时区展示——这是 dayjs 的默认行为。需要切换时区时直接用 dayjs API(前提是已经调过 dayjsInit()):
ts
import dayjs from 'dayjs';
import { dayjsInit } from '@tripo3d/utils/date';
dayjsInit(); // 必须先调,否则 .tz() 不可用
dayjs(1714040445000).tz('America/New_York').format('YYYY-MM-DD HH:mm');已注册的插件清单(调用 dayjsInit() 之后)
| 插件 | 用途 |
|---|---|
dayjs/plugin/utc | dayjs.utc() / .utc() / .local() 等 UTC 互转 API |
dayjs/plugin/timezone | dayjs.tz() / .tz('Asia/Shanghai') 时区切换 |
需要更多插件(relativeTime、duration、locale 等)请在宿主工程自行 dayjs.extend(...) 与 dayjs.locale(...),与本子入口的 dayjsInit() 调用顺序无关——dayjs 的 extend 是幂等的。
常见模式
ts
import dayjs from 'dayjs';
import { dayjsInit, utcToApproximate, utcToDetailed } from '@tripo3d/utils/date';
dayjsInit(); // app 入口调一次
// 列表展示
const rows = items.map(item => ({
...item,
createdAtLabel: utcToApproximate(item.created_at),
}));
// 详情展示
const detail = utcToDetailed(item.created_at);
// 计算相对时间
const minutes = dayjs().diff(dayjs(item.created_at), 'minute');
const label = minutes < 60 ? `${minutes} 分钟前` : utcToApproximate(item.created_at);