#!/bin/zsh z-ts-to-human() { local t s n d h m f x t=$1 t=$(( float(t) )) s=$(( int(t) )) n=$(( int((t - s) * (10**9)) )) t=$s d=0 h=0 m=0 if [ $t -ge 86400 ] ; then d=$(( t / 86400 )) t=$(( t % 86400 )) fi if [ $t -ge 3600 ] ; then h=$(( t / 3600 )) t=$(( t % 3600 )) fi if [ $t -ge 60 ] ; then m=$(( t / 60 )) t=$(( t % 60 )) fi ## strftime does desired rounding for $n/(10**9) internally f=$(strftime '%s.%6.' $t $n) ## keep math in sync with format above x=3 case "$2" in 0) x=7 ;; [1-6]) x=$(( 6 - $2 )) ;; esac [ $x -gt 0 ] && f="${f:0:-$x}s" [ $s -ge 60 ] && f="${m}m:$f" [ $s -ge 3600 ] && f="${h}h:$f" [ $s -ge 86400 ] && f="${d}d:$f" echo "$f" }