1
0
dotfiles/.config/zsh/lib/time.zsh

42 lines
822 B
Bash
Raw Normal View History

2021-03-21 18:25:10 +03:00
#!/bin/zsh
z-ts-to-human() {
2024-01-16 02:55:39 +03:00
local t s n d h m f x
2022-07-19 02:41:45 +03:00
t=$1
2024-01-16 02:55:39 +03:00
t=$(( float(t) ))
2022-07-19 02:41:45 +03:00
s=$(( int(t) ))
2024-01-16 02:55:39 +03:00
n=$(( int((t - s) * (10**9)) ))
2021-03-21 18:25:10 +03:00
t=$s
2022-07-19 02:41:45 +03:00
d=0 h=0 m=0
2021-03-21 18:25:10 +03:00
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
2024-01-16 02:55:39 +03:00
## strftime does desired rounding for $n/(10**9) internally
f=$(strftime '%s.%6.' $t $n)
2021-03-21 18:25:10 +03:00
## keep math in sync with format above
2024-01-16 02:55:39 +03:00
x=3
2021-03-21 18:25:10 +03:00
case "$2" in
0) x=7 ;;
2024-01-16 02:55:39 +03:00
[1-6]) x=$(( 6 - $2 )) ;;
2021-03-21 18:25:10 +03:00
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"
2022-07-19 02:41:45 +03:00
2021-03-21 18:25:10 +03:00
echo "$f"
}