1// import { DurationUnit } from 'luxon' 3import * as _ from 'lodash-es' 6 // | 'years' | 'quarters' | 'months' | 'weeks' 7 | 'days' | 'hours' | 'minutes' | 'seconds'// | 'milliseconds' 8// type DurTypeStr = DurationUnit 10const unitAbbrev : Partial<Record<DurationUnit, string>> = { 18 const sec = luxonDiff.as('seconds') 19 return (sec < 0 ? '-' : '+') + secToHumanAbs(sec) 22export const durHumanAbs = (luxonDiff: LuxDuration | undefined) => { 23 if (!luxonDiff) return luxonDiff 24 return secToHumanAbs(luxonDiff.as('seconds')) 27export const secToHumanAbs = (durSec: number): string => { 29 durSec = Math.abs(durSec) 32 // const unitAbbrev = { 33 // days: 'notimportant', 35 // Duration.fromMillis(1000).as(Object.keys(unitAbbrev)[0] as DurTypeStr) 36 const units = _.keys(unitAbbrev) 37 for(let i = 0; i < units.length; i += 1) { 38 const unit = units[i] as DurationUnit 39 const unitDurSec = LuxDuration.fromObject({[unit]: 1}).as('seconds') 41 if (unitDurSec <= durSec) { 42 const unitDur = _.round(LuxDuration.fromMillis(durSec * 1000).as(unit)) 43 const abbrev = unitAbbrev[unit] 44 return `${unitDur}${abbrev}` 48 return '0s' // Default return to handle edge case when no condition is met