Bash:
Sammenlikning av to datoer
How to:
Sammenlign to datoer med følgende Bash-kommandoer. Først, bruk date
kommandoen til å konvertere datoer til sekunder siden Unix-epoken. Deretter sammenlign verdiene med -lt
, -gt
, eller -eq
.
# Sett datoene
DATE1="2023-04-01"
DATE2="2023-04-15"
# Konverter datoene til sekunder siden epoch
SECONDS1=$(date -d "$DATE1" +%s)
SECONDS2=$(date -d "$DATE2" +%s)
# Sammenlign datoene
if [ "$SECONDS1" -lt "$SECONDS2" ]; then
echo "DATE1 er tidligere enn DATE2"
elif [ "$SECONDS1" -gt "$SECONDS2" ]; then
echo "DATE1 er senere enn DATE2"
else
echo "Datoene er like"
fi
Eksempel på utdata:
DATE1 er tidligere enn DATE2
Deep Dive:
Før date
kommandoen, brukte mange en lang rekke av Perl eller Python-scripts for å sammenligne datoer. En alternativ tilnærming er å bruke et program som datediff
fra dateutils
. I forhold til implementasjon, så er nøkkelen i Bash å konvertere datoer til et format som lett lar seg sammenligne - som sekunder siden Unix-epoken.
Husk at tidssoner kan påvirke resultatet av sammenligningen, så det er best å holde seg til UTC for konsistens. Bash har ikke innebygget støtte for kompleks dato-håndtering, så for mer avanserte behov kan det være lurt å se mot andre verktøy eller språk.
See Also:
- GNU Coreutils
date
: https://www.gnu.org/software/coreutils/manual/html_node/date-invocation.html dateutils
på GitHub: https://github.com/hroptatyr/dateutils- Advanced Bash-Scripting Guide: https://tldp.org/LDP/abs/html/abs-guide.html
- Time Zone handling in Linux: https://www.thegeekstuff.com/2010/09/change-timezone-in-linux/