Proponiendo esta solución que usa 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
toma una fecha arbitraria y la convierte a un formato dado (como en este caso +%s.%N
, un float
de segundos) . Tenga en cuenta que
-d no es parte de la fecha POSIX. [Pero] mientras [usted] no esté trabajando en distribuciones como Solaris ([OP] lo ha etiquetado como linux y no como unix) [usted] debería estar bien. :)
(comentario de jaypal singh sobre esta respuesta)
Para volver a convertirlo en legible por humanos, puede usar:date $2 -d @0$diff #Pad diff with leading zero
Donde $2
de nuevo es un formato de fecha ver por ejemplo aquí
let DIFF=(`date +%s -d 20120203`-`date +%s -d 20120115`)/86400
echo $DIFF