@@ -196,6 +196,36 @@ function formatNumber(n:number, attrs?:any) {
196
196
return fmtAttrs ( ret , attrs )
197
197
}
198
198
199
+ /** Format human readable ms */
200
+ export function humanifyMs ( ms :number ) : string {
201
+ const seconds = Math . floor ( ms / 1000 )
202
+ const minutes = Math . floor ( seconds / 60 )
203
+ const hours = Math . floor ( minutes / 60 )
204
+ const days = Math . floor ( hours / 24 )
205
+
206
+ if ( days > 0 ) {
207
+ return `${ days } d ${ humanifyMs ( ms - days * 24 * 60 * 60_000 ) } `
208
+ } else if ( hours > 0 ) {
209
+ return `${ hours } h ${ humanifyMs ( ms - hours * 60 * 60_000 ) } `
210
+ } else if ( minutes > 0 ) {
211
+ return `${ minutes } m ${ humanifyMs ( ms - minutes * 60_000 ) } `
212
+ } else if ( seconds > 0 ) {
213
+ return `${ seconds } s`
214
+ }
215
+ return `${ ms } ms`
216
+ }
217
+
218
+ /** Format human readable number */
219
+ export function humanifyNumber ( n :number ) {
220
+ if ( n >= 1_000_000_000 )
221
+ return ( n / 1_000_000_000 ) . toFixed ( 1 ) + "b"
222
+ if ( n >= 1_000_000 )
223
+ return ( n / 1_000_000 ) . toFixed ( 1 ) + "m"
224
+ if ( n >= 1_000 )
225
+ return ( n / 1_000 ) . toFixed ( 1 ) + "k"
226
+ return n . toLocaleString ( )
227
+ }
228
+
199
229
/** Format an API Response value */
200
230
export function apiValueFmt ( o :any , format ?:FormatInfo | null , attrs ?:any ) {
201
231
let ret = apiValue ( o )
@@ -421,6 +451,8 @@ export function useFormatters() {
421
451
enumFlags,
422
452
formatDate,
423
453
formatNumber,
454
+ humanifyMs,
455
+ humanifyNumber,
424
456
425
457
indentJson,
426
458
prettyJson,
0 commit comments