Bash:
Comparando duas datas

Como Fazer:

# Comparando datas formatadas como 'YYYY-MM-DD'.
data1="2023-04-01"
data2="2023-04-15"

# Convertendo para segundos desde 1970 (Epoch time)
sec1=$(date -d "$data1" +%s)
sec2=$(date -d "$data2" +%s)

# Comparação simples
if [ "$sec1" -eq "$sec2" ]; then
  echo "As datas são iguais."
elif [ "$sec1" -lt "$sec2" ]; then
  echo "$data1 é anterior a $data2."
else
  echo "$data1 é posterior a $data2."
fi

# Diferença em dias
diferenca=$(( (sec2 - sec1) / 86400 ))
echo "A diferença é de $diferenca dias."

Saída esperada:

2023-04-01 é anterior a 2023-04-15.
A diferença é de 14 dias.

Aprofundamento

Comparar datas é um problema clássico em programação, existindo desde que os primeiros calendários foram incorporados aos sistemas. Inicialmente, isso era feito manualmente, mas com o tempo, ferramentas como o date no Unix facilitaram a tarefa.

Alternativamente, em Bash, podemos usar outras ferramentas como awk ou manipular strings diretamente, mas date é direto e amplamente disponível. Ao converter datas para segundos (Epoch time), é simples fazer operações matemáticas com elas.

Detalhes de implementação incluem preocupação com fuso horário e formato de data local. Uso do comando date varia entre sistemas e é importante conferir a documentação específica da sua distribuição.

Veja Também