Files
Genarrative/packages/shared/src/lib/formatElapsedDuration.ts
T
suzmii 2257a78d6b 收口思考等待反馈与紧凑过程样式及失败状态
思考展开时隐藏重复预览并使用灯泡图标,首个响应前显示临时思考提示。
统一分钟内小数和分钟以上整数秒,保持内外过程的紧凑间距与正文层级。
失败工具与分组显示错误色,非零退出码不再误判为成功。
补齐状态、格式、样式和交互回归,本批其余需求留待后续PR。
2026-09-18 15:46:30 +08:00

27 lines
971 B
TypeScript

/**
* 毫秒耗时的统一显示:5.2秒 / 2分05秒 / 1时02分05秒。
* 不足一分钟保留一位小数,达到分钟后显示整数秒;先舍入再拆单位,避免进位溢出。
* 非法或未知耗时返回 null,不能以 0 冒充已测得结果。
*/
export function formatElapsedDuration(
milliseconds: number | null | undefined,
): string | null {
if (
milliseconds == null ||
!Number.isFinite(milliseconds) ||
milliseconds < 0
) {
return null;
}
const tenths = Math.round(milliseconds / 100);
if (tenths < 600) return `${(tenths / 10).toFixed(1)}秒`;
const totalSeconds = Math.round(milliseconds / 1000);
const hours = Math.floor(totalSeconds / 3600);
const minutes = Math.floor((totalSeconds % 3600) / 60);
const seconds = String(totalSeconds % 60).padStart(2, '0');
if (hours > 0) {
return `${hours}时${String(minutes).padStart(2, '0')}分${seconds}秒`;
}
return `${minutes}分${seconds}秒`;
}