Bash:
Comparer deux dates
Comment faire :
#!/bin/bash
# Date 1 in YYYY-MM-DD
date1="2023-04-01"
# Date 2 in YYYY-MM-DD
date2="2023-04-15"
# Compare using date command
if [ "$(date -d "$date1" +%s)" -lt "$(date -d "$date2" +%s)" ]; then
echo "La date1 est antérieure à la date2."
elif [ "$(date -d "$date1" +%s)" -gt "$(date -d "$date2" +%s)" ]; then
echo "La date1 est postérieure à la date2."
else
echo "Les deux dates sont identiques."
fi
Sortie attendue :
La date1 est antérieure à la date2.
Plongée Profonde
Historiquement, comparer des dates en Bash était un peu laborieux avant l’introduction de certaines fonctionnalités de date
et des calculs arithmétiques. Le format +%s
convertit les dates en secondes depuis l’époque UNIX, facilitant la comparaison.
Comme alternative, dateutils
est un ensemble d’outils puissant pour manipuler des dates. Il inclut datediff
qui peut être utilisé pour comparer des dates directement.
En ce qui concerne les détails d’implémentation, prendre compte des fuseaux horaires et de l’heure d’été peut compliquer la comparaison directe des dates. Il convient donc de toujours comparer des dates normalisées en UTC pour éviter les pièges.
Voir également
- GNU Coreutils: https://www.gnu.org/software/coreutils/manual/html_node/date-invocation.html
- Dateutils: http://www.fresse.org/dateutils/
- Bash Guide: https://mywiki.wooledge.org/BashGuide/Dates