LINUX.ORG.RU

История изменений

Исправление Kroz, (текущая версия) :

В man date есть пример с датой в том формате, в котором оно понимает: «2004-02-29 16:21:42».

И приведенный пример считает разницу в секундах, а не в месяцах.

А в месяцах можно считать двояко. Можно в секундах, затем делить на 30 дней:

$ echo $(( ( $(date +%s --date="1981-01-01") - $(date +%s --date="1980-01-01") ) / (60*60*24*30) ))
12

Но, ИМХО, так не совсем правильно. Особенно ошибка будет заметна на больших диапазонах.
Я бы отдельно считал разницу в годах, отдельно в месяцах:
$ echo $(( $(date +%m --date="1981-01-01") - $(date +%m --date="1980-01-01") + ( $(date +%Y --date="1981-01-01") - $(date +%Y --date="1980-01-01") ) * 12 ))
12

Исходная версия Kroz, :

В man date есть пример с датой в том формате, в котором оно понимает: «2004-02-29 16:21:42».

И приведенный пример считает разницу в секундах, а не в месяцах.

А в месяцах можно считать двояко. Можно в секундах, пото мделить на 30 дней:

$ echo $(( ( $(date +%s --date="1981-01-01") - $(date +%s --date="1980-01-01") ) / (60*60*24*30) ))
12

Но, ИМХО, так не совсем правильно. Особенно ошибка будет заметна на больших диапазонах.
Я бы отдельно считал разницу в годах, отдельно в месяцах:
$ echo $(( $(date +%m --date="1981-01-01") - $(date +%m --date="1980-01-01") + ( $(date +%Y --date="1981-01-01") - $(date +%Y --date="1980-01-01") ) * 12 ))
12