Ruby:
Comparando duas datas

Como fazer:

require 'date'

# Criando duas datas para comparação
data1 = Date.new(2023, 4, 1)
data2 = Date.new(2023, 5, 1)

# Comparar datas (true se data1 for antes de data2)
data1_antes_data2 = data1 < data2
puts "Data1 é antes de Data2? #{data1_antes_data2}" # Saída: true

# Calcular a diferença em dias
diferenca_dias = (data2 - data1).to_i
puts "Diferença em dias: #{diferenca_dias}" # Saída: 30

# Verificar se as datas são iguais
datas_sao_iguais = data1 == data2
puts "As datas são iguais? #{datas_sao_iguais}" # Saída: false

Mergulho Profundo:

Comparar datas é uma prática tão antiga quanto a própria noção de calendário. No Ruby, a classe Date e a classe DateTime são frequentemente utilizadas para lidar com datas e tempo. Antes do Ruby proporcionar essas classes no módulo date, programadores dependiam de bibliotecas de terceiros ou de manipulação manual de strings e timestamps.

Além de usar <, > e ==, também podemos usar <=> (o operador de comparação) que retorna -1, 0 ou 1 dependendo se a primeira data é anterior, igual ou posterior à segunda. Esse operador é útil quando queremos ordenar arrays de datas, por exemplo.

Outra alternativa é usar as bibliotecas de terceiros, como o popular ‘ActiveSupport’ do framework Rails, que oferece métodos adicionais como before? e after? para facilitar a leitura.

Na implementação interna, o Ruby lida com datas convertendo-as para um formato de contador de dias desde uma data época, que é o ‘Day Zero’ em 1 de janeiro do ano 4713 A.C. Isso permite calcular diferenças de forma absoluta, evitando vários problemas de fuso horário e de calendário.

Veja Também: