IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Différence de deux dates


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 122
    Par défaut Différence de deux dates
    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.

  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    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
    bon ok la j'ai oublie de gerer le cas negatif mais c'est pour le principe mouarf:

    pour le nombre de mois tu peux bien sur ajouter le nombre d'annees *12 au nombres de mois... isoles

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Par défaut
    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"

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/07/2006, 14h04
  2. Nombre de minutes de différence entre deux dates
    Par Oberown dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 05/05/2006, 15h41
  3. Différence entre deux dates
    Par Azharis dans le forum Access
    Réponses: 3
    Dernier message: 11/01/2006, 10h58
  4. Différence entre deux dates
    Par pittzz dans le forum Oracle
    Réponses: 5
    Dernier message: 18/07/2005, 12h24
  5. Comment obtenir la différence entre deux dates ?
    Par jbat dans le forum Langage
    Réponses: 4
    Dernier message: 02/06/2005, 09h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo