Vorschlag dieser Lösung, die bc
verwendet :
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
nimmt ein beliebiges Datum und konvertiert es in ein vorgegebenes Format (wie in diesem Fall +%s.%N
, ein float
Sekunden) . Beachten Sie das
-d ist kein Teil des POSIX-Datums. [Aber] solange [Sie] nicht an Distributionen wie Solaris arbeiten ([OP] hat es mit Linux und nicht mit Unix gekennzeichnet) [Sie] sollten gut sein. :)
(Kommentar von Jaypal Singh zu dieser Antwort)
Um es wieder lesbar zu machen, können Sie Folgendes verwenden:date $2 -d @0$diff #Pad diff with leading zero
Wobei $2
wieder ein Datumsformat siehe zB hier
let DIFF=(`date +%s -d 20120203`-`date +%s -d 20120115`)/86400
echo $DIFF