История изменений
Исправление 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