Proposer cette solution qui utilise bc
:
current="$(date +%s.%N)" #current date, precise to nanoseconds
old="$(date +%s.%N -d "$(sh some_script_that_gives_a_date.sh)")" #convert output to ns too
diff=$(echo "$current-$old" |bc)
date +%s.%N -d $1
prend une date arbitraire et la convertit dans un format donné (comme dans ce cas +%s.%N
, un float
de secondes) . Sachez que
-d ne fait pas partie de la date POSIX. [Mais] tant que [vous] ne travaillez pas sur des distributions comme Solaris ([OP] l'a étiqueté linux et non unix), [vous] devriez être bon. :)
(commentaire de jaypal singh sur cette réponse)
Pour le reconvertir en texte lisible par l'homme, vous pouvez utiliser :date $2 -d @0$diff #Pad diff with leading zero
Où $2
encore une fois est un format de date voir par exemple ici
let DIFF=(`date +%s -d 20120203`-`date +%s -d 20120115`)/86400
echo $DIFF