Сценарий оболочки для получения различия в двух датах

Если существуют даты как 01.06.2010 и другой как 15.05.2010

Используя сценарий оболочки или дату управляют, как получить количество дней между этими двумя датами

Спасибо..

14
задан skaffman 8 October 2010 в 15:19
поделиться

3 ответа

Использование только даты и арифметики оболочки:

echo $(($(($(date -d "2010-06-01" "+%s") - $(date -d "2010-05-15" "+%s"))) / 86400))
16
ответ дан 1 December 2019 в 09:00
поделиться

Понятно

             d1=`date +%s -d $1`
             d2=`date +%s -d $2`
            ((diff_sec=d2-d1))
         echo - | awk -v SECS=$diff_sec '{printf "Number of days : %d",SECS/(60*60*24)}'

спасибо ..

1
ответ дан 1 December 2019 в 09:00
поделиться

Есть решение, которое почти работает: используйте формат даты GNU % s , который печатает количество секунд с 1970-01- 01 00:00. Их можно вычесть, чтобы найти разницу во времени между двумя датами.

echo $(( ($(date -d 2010-06-01 +%s) - $(date -d 2010-05-15 +%s)) / 86400))

Но в некоторых местах ниже отображается 0:

echo $((($(date -d 2010-03-29 +%s) - $(date -d 2010-03-28 +%s)) / 86400))

Из-за перехода на летнее время между этими временами всего 23 часа. Вам нужно добавить хотя бы один час (и не больше 23), чтобы быть в безопасности.

echo $((($(date -d 2010-03-29 +%s) - $(date -d 2010-03-28 +%s) + 43200) / 86400))

Или вы можете указать дату для работы в часовом поясе без летнего времени.

echo $((($(date -u -d 2010-03-29 +%s) - $(date -u -d 2010-03-28 +%s)) / 86400))

(POSIX говорит, что эталонный часовой пояс называется UTC, но также запрещает считать дополнительные секунды, поэтому количество секунд в день всегда равно 86400 в часовом поясе GMT ​​+ xx.)

11
ответ дан 1 December 2019 в 09:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: