Kahden päivämäärän vertailu

Bash:
Kahden päivämäärän vertailu

How to: (Kuinka tehdä:)

#!/bin/bash
# Muoto YYYY-MM-DD

pvm1="2023-03-15"
pvm2="2023-04-01"

if [[ "$pvm1" > "$pvm2" ]]; then
    echo "pvm1 on myöhemmin kuin pvm2."
elif [[ "$pvm1" < "$pvm2" ]]; then
    echo "pvm1 on aikaisemmin kuin pvm2."
else
    echo "pvm1 ja pvm2 ovat samat."
fi

Esimerkki tuloste:

pvm1 on aikaisemmin kuin pvm2.

Deep Dive (Syväsukellus):

Bashissa, joka on syntynyt 1989, päivämäärien vertailuun on monta tapaa. Käytimme yksinkertaista leksikaalista vertailua koska päivämäärät ovat standardissa ISO 8601 -muodossa. Jos muoto vaihtelee, date-komennolla voidaan muuttaa eri formaatteja sekuntteihin siitä hetkestä, kun Unix-aika alkoi (1.1.1970), ja vertailla näitä.

Vaihtoehtoisesti:

# Muunnetaan päivämäärät sekunneiksi
sek_pvm1=$(date -d "$pvm1" +%s)
sek_pvm2=$(date -d "$pvm2" +%s)

# Vertailu
if [ "$sek_pvm1" -gt "$sek_pvm2" ]; then
    echo "pvm1 on myöhemmin kuin pvm2."
elif [ "$sek_pvm1" -lt "$sek_pvm2" ]; then
    echo "pvm1 on aikaisemmin kuin pvm2."
else
    echo "pvm1 ja pvm2 ovat samat."
fi

Ymmärtäminen, että päivämäärien vertailu tekstijonoina onnistuu, koska Bash vertaa niitä leksikografisesti. Tämä tarkoittaa, että merkkijonoja verrataan niiden järjestyksessä, aakkos-numeerisesti.

See Also (Katso myös):