yeg
2026-09-09 b226aa0db7fbecb8fff92476537adc0ca3e16a4f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/** 将设备或文件的秒时长显示为累计小时,保留毫秒;缺失不补零。 */
export function formatTestDuration(value: unknown): string {
  if (value == null || value === '' || value === '-') return '-'
  const seconds = Number(value)
  if (!Number.isFinite(seconds) || seconds < 0) return '-'
  const milliseconds = Math.round(seconds * 1000)
  return `${Math.floor(milliseconds / 3600000)}:${String(Math.floor(milliseconds / 60000) % 60).padStart(2, '0')}:${String(Math.floor(milliseconds / 1000) % 60).padStart(2, '0')}.${String(milliseconds % 1000).padStart(3, '0')}`
}
 
/** 解析累计时长;仅旧秒值输入允许纯数字,不将其解释为绝对时间。 */
export function parseTestDuration(value: unknown): number | null {
  const text = String(value ?? '').trim()
  if (!text || text === '-') return null
  const duration = /^(\d+):([0-5]\d):([0-5]\d)(?:\.(\d{1,3}))?$/.exec(text)
  const seconds = duration ? Number(duration[1]) * 3600 + Number(duration[2]) * 60 + Number(duration[3]) + Number((duration[4] || '').padEnd(3, '0')) / 1000 : Number(text)
  return Number.isFinite(seconds) && seconds >= 0 && Number.isSafeInteger(Math.round(seconds * 1000)) ? seconds : NaN
}