Bash:
Twee datums vergelijken

Hoe te:

Hier is een snelle manier om twee datums in Bash te vergelijken:

date1="2023-04-01"
date2="2023-04-15"

# Converteer datums naar seconden sinds het tijdperk
sec1=$(date -d "$date1" +%s)
sec2=$(date -d "$date2" +%s)

# Vergelijk de datums
if [ $sec1 -eq $sec2 ]; then
    echo "Datums zijn hetzelfde."
elif [ $sec1 -lt $sec2 ]; then
    echo "Datum $date1 is eerder dan $date2."
else
    echo "Datum $date1 is later dan $date2."
fi

Voorbeelduitvoer als $date2 later is:

Datum 2023-04-01 is eerder dan 2023-04-15.

Diepgaande Duik

Historisch gezien was datums vergelijken in shellscripts niet eenvoudig vanwege verschillende datumformaten en gebrek aan ingebouwde functies. Het date commando, met %s om datums naar seconden te converteren sinds het Unix-tijdperk (00:00:00 UTC op 1 januari 1970), is een godsgeschenk.

Alternatieven omvatten het gebruik van externe tools zoals awk of het doen van string vergelijkingen - riskant als formaten variëren. Wat betreft de implementatie, is één eigenaardigheid het omgaan met tijdzones: het toevoegen van TZ=UTC vóór date commando’s zorgt voor UTC vergelijkingen.

Datum rekenkunde, zoals het vinden van het verschil tussen datums, kan complex worden. Het toevoegen of aftrekken van dagen vereist meer date slimmigheden. Bijzondere situaties, zoals schrikkelseconden of overgangen naar zomertijd, kunnen fouten introduceren.

Zie Ook