Exactement comme sonne la question. Je veux soustraire dire 20120115 de 20120203 et obtenir 19 comme réponse. Quel est le meilleur moyen d’implémenter cela dans un script Shell?
let DIFF=(`date +%s -d 20120203`-`date +%s -d 20120115`)/86400
echo $DIFF
Un correctif rapide et complètement sale qui peut être utilisé dans les scripts (rapide et aussi rapide):
function getdate { for dd in $(seq -w $1 $2) ; do date -d $dd +%Y%m%d 2>/dev/null ; done ; }
J'utilise cette fonction à d'autres fins liées aux fichiers journaux. Et compter les jours:
echo "$(getdate YYYYmmdd YYYYmmdd)" | wc -l
YYYYmmdd doivent être des dates, bien sûr. Cela ne fonctionne que si $ 1 est une date antérieure à $ 2 et qu'elle est lente pour les différences de date importantes, mais pour une période de quelques années et pour être utilisée dans des scripts ad-hoc, c'est très pratique.
Et si vous avez installé MySQL ou similaire, il existe une option très rapide:
mysql -BNe "SELECT DATEDIFF($1,$2) AS DiffDate ;" | tr -d -
La dernière tr
vous permet de saisir les dates dans n’importe quel ordre (sinon, MySQL afficherait un '-' si la première date est antérieure à la seconde)