web-dev-qa-db-fra.com

Comment puis-je obtenir la différence entre deux dates sous bash

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? 

14
owagh
let DIFF=(`date +%s -d 20120203`-`date +%s -d 20120115`)/86400
echo $DIFF
25
Eugen Rieck

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)

0
runlevel0