Это близко к перепосту этого вопроса . Адаптация их сценария к вашему формату дает нам этот набор команд:
echo "$(( $(date -d "$d2" +%s) - $(date -d "$d1" +%s) )) / 86400" | bc -l
, где $d1 — меньшая (более ранняя дата ), а $d2 — большая (более поздняя )дата.
Итак, насколько я могу судить, это должно сработать:
echo "$(( $(date -d "$modDate" +%s) - $(date -d "$now" +%s) )) / 86400" | bc -l
Чтобы уточнить,
bc -l
Согласно справочной странице,
...a language that supports arbitrary precision numbers with interactive execution of statements. There are some similarities in the syntax to the C programming language.
Это позволяет вам получить десятичные числа в вашем ответе, так как большинство оболочек поддерживают только целочисленное деление.
Вы можете сделать это, используя bash процесс -подстановку:
Обратите внимание, что вы должны перенаправить его обратно в stderr, чтобы он не попал в канал stdout:
$ perl -E 'say {*STDOUT} "hi"; say {*STDERR} "bye"' \ > >(sed s/^/out:/) \ 2> >(sed s/^/err:/ >&2)