Bonjour amis!
Excusez-moi! J'aimerais savoir s'il est possible sous le Shell d'effectuer la différence de deux dates?Je veux par la suite évaluer le resultat en nombre de mois.
Merci d'avance.
Bonjour amis!
Excusez-moi! J'aimerais savoir s'il est possible sous le Shell d'effectuer la différence de deux dates?Je veux par la suite évaluer le resultat en nombre de mois.
Merci d'avance.
bon ok la j'ai oublie de gerer le cas negatif mais c'est pour le principe mouarf:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 toto="16/10/2008" francois@testbox:~$ totoj=$(echo $toto | awk -F "/" '{print $1}') francois@testbox:~$ totom=$(echo $toto | awk -F "/" '{print $2}') francois@testbox:~$ totoa=$(echo $toto | awk -F "/" '{print $3}') francois@testbox:~$ tito="15/12/2009" francois@testbox:~$ titoa=$(echo $tito | awk -F "/" '{print $3}') francois@testbox:~$ titom=$(echo $tito | awk -F "/" '{print $2}') francois@testbox:~$ titoj=$(echo $tito | awk -F "/" '{print $1}') francois@testbox:~$ njour=`expr $titoj - $totoj` francois@testbox:~$ nmoi=`expr $totom - $titom` francois@testbox:~$ nan=`expr $titoa - $totoa` francois@testbox:~$ dif=$nan" ans "$nmoi" mois "$njour" jours" francois@testbox:~$ echo $dif 1 ans -2 mois -1 jours
pour le nombre de mois tu peux bien sur ajouter le nombre d'annees *12 au nombres de mois... isoles
La difficulté dans le calcul sur dates est qu'il faut tenir compte du nombre variable de jours dans un mois, des dates à cheval sur deux années, des années bissexitiles etc...
Mais coreutils nous réserve de bonnes surprises. Et plein d'options pas toujours bien documentées.
Ma fonction ci-dessous permet de calculer la différence entre dates, exprimée en sec., minutes, heures et jours. Pas en nombre de mois pour la raison évoquée plus haut.
Attention de bien exprimer les dates en format ANSI/ISO %Y-%m-%d
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 date2stamp () { date --utc --date "$1" +%s } dateDiff (){ case $1 in -s) sec=1; shift;; -m) sec=60; shift;; -h) sec=3600; shift;; -d) sec=86400; shift;; *) sec=86400;; esac dte1=$(date2stamp $1) dte2=$(date2stamp $2) diffSec=$((dte2-dte1)) if ((diffSec < 0)); then abs=-1; else abs=1; fi echo $((diffSec/sec*abs)) } # calcul du nombre de jours entre 2 dates # -s en sec. | -m en min. | -h en heures | -d en jours (défaut) dateDiff -s "2006-10-01" "2006-10-31" dateDiff -m "2006-10-01" "2006-10-31" dateDiff -h "2006-10-01" "2006-10-31" dateDiff -d "2006-10-01" "2006-10-31" dateDiff "2006-10-01" "2006-10-31" # nombre de secondes entre deux heures dateDiff -s "17:55" "23:15:07" dateDiff -m "17:55" "23:15:07" dateDiff -h "17:55" "23:15:07" # nombre de minutes nous séparant de la fin de l'année dateDiff -m "now" "2006-12-31 24:00:00 CEST"
Partager