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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| #!/bin/bash
# Possibilités classiques de la commande GNU date (mais pas toujours bien documentées)
dte="2006-10-01 06:55:55"
echo $dte
# ajouter 2 jours, 1 heures et 5 secondes à la date donnée
date --date "$dte 2 days 1 hour 5 sec"
# soustraire 3 jours, 5 heures et 10 secondes à la date donnée
date --date "$dte 3 days 5 hours 10 sec ago"
# soustraire 3 jours, 5 heures et 10 secondes la date d'aujourd'hui
date --date "now 3 days 5 hours 10 sec ago"
# fonctions maison (pour la suite...)
date2stamp () {
date -u --date "$1" +%s
}
stamp2date (){
date -u --date "1970-01-01 $1 sec" "+%Y-%m-%d %T"
}
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))
}
# convertir un date en timestamp UNIX
stamp=$(date2stamp "2006-10-01 15:00")
echo $stamp
# convertir un timestamp en date/heure
stamp2date $stamp
# différence entre deux dates
# -s en sec. -m en min. -h en heures -d ou rien en jours
dateDiff -s "2006-10-01" "2006-10-32"
dateDiff -m "2006-10-01" "2006-10-32"
dateDiff -h "2006-10-01" "2006-10-32"
dateDiff -d "2006-10-01" "2006-10-32"
dateDiff "2006-10-01" "2006-10-32"
# nombre de secondes entre deux heures données
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" |
Partager