Proponendo questa soluzione che utilizza 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
prende una data arbitraria e la converte in un dato formato (come in questo caso +%s.%N
, un float
di secondi) . Tieni presente che
-d non fa parte della data POSIX. [Ma] fintanto che [non stai] lavorando su distribuzioni come Solaris ([OP] l'ha etichettato come linux e non unix) [tu] dovresti essere bravo. :)
(commento di jaypal singh su questa risposta)
Per riconvertirlo in leggibile dall'uomo, puoi usare:date $2 -d @0$diff #Pad diff with leading zero
Dove $2
again è un formato di data vedi per esempio qui
let DIFF=(`date +%s -d 20120203`-`date +%s -d 20120115`)/86400
echo $DIFF