/** 将设备或文件的秒时长显示为累计小时,保留毫秒;缺失不补零。 */
|
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
|
}
|