Categories
English geeking

Elapsed time in UNIX shell

The other day I had enough calculating the time so I just wrote this script:
cat > ~/bin/timediff
#!/bin/sh
if [ -z $2 ]; then
echo "usage: $0 "
echo
echo "ex. $0 11:49 12:51"
exit 1
fi

end=`date +%s -d"$2"`
start=`date +%s -d"$1"`

diff=$(($end-$start))

diff=$(($diff/60))
hours=$(($diff/60))
min=$(($diff%60))
# Prepend a 0 if minute <10
if [ ${#min} -eq 1 ]; then
min=0$min
fi

echo "$hours:$min"

Of course, it works in some cases only. This one is fine:
$ sh ~/bin/timediff 11:49 12:51
1:02

Whereas this one will not work:
$ sh ~/bin/timediff 11:49 1:51
-9:-58

But the output is quite obvious.