Verifique se a data tem n anos

0

Eu tenho uma variável $ date com o formato aaaa-mm-dd e gostaria de verificar se é exatamente 1 ano, 2 anos (e assim por diante) antiga.

Isso é o que eu tentei até agora:

dates=$(echo $date | cut -c6-10)
todays=$(date +"%m-%d")
if [ $todays == $dates ]; then
        echo "$path;$date;$time;$gps" >>$databasematch
else
        :
fi
    
por giovi321 19.06.2016 / 12:20

1 resposta

0

Suponho que as variáveis $today e $date tenham a data de hoje e a data em que você deseja a verificação, respectivamente.

Não há necessidade de converter as datas para segunda resolução e você nunca subtrai ou adiciona nada de / para qualquer data na comparação. Além disso, a data do GNU saberá a data de hoje (então $today pode ser removido), e a citação é um pouco confusa.

Aqui está uma versão que verifica se $then_date é um ano atrás (a data do GNU é chamada gdate no meu sistema):

then_date="2019-09-17"

if [[ $( gdate -d "now -1 year" +"%Y-%m-%d" ) == "$then_date" ]]; then
    echo "YES"
else
    echo "NO"
fi

Se você quiser o número de anos entre as datas, compare primeiro a data sem o ano e, em seguida, exiba a diferença do ano:

if [[ $( gdate +"%m%d" ) == $( gdate -d "$then_date" +"%m%d" ) ]]; then
    now_year=$( gdate +"%Y" )
    then_year=$( gdate -d "$then_date" +"%Y" )

    printf "'%s' is today, but %d years ago\n" \
        "$then_date" "$(( now_year - then_year ))"

else
    echo "Not same day"
fi

EDITAR : A questão mudou. Agora, pergunta se existe uma maneira melhor de fazer

dates=$(echo $date | cut -c6-10)
todays=$(date +"%m-%d")
if [ $todays == $dates ]; then
        echo "$path;$date;$time;$gps" >>$databasematch
else
        :
fi

Sim, existe:

now_day=$( gdate +"%m%d" )

echo "$date" | 
while read then_date; do
    then_day=$( gdate -d "$then_date" +"%m%d" )
    if [[ "$now_day" == "$then_day" ]]; then
        echo "$path;$date;$time;$gps"
    fi
done >$databasematch

Isso evita a leitura de muitos dados em uma variável se você estiver planejando substituir o echo "$date" bit por qualquer coisa que gere datas.

    
por 19.06.2016 / 12:48