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 :

Script pour compter les jours entre deux dates


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 97
    Points : 44
    Points
    44
    Par défaut Script pour compter les jours entre deux dates
    Bonjour,

    N'ayant plus partiqué le scripting depuis quelques temps (je mis remet progressivement) j'aimerai savoir comment faire pour écrire un script me permettant de compter le nombre de jours entre deux dates.

    Merci de vos réponses.

    Bonne journées.

  2. #2
    Membre confirmé Avatar de PaulNero
    Homme Profil pro
    DBA Senior Oracle and SQL SERVER
    Inscrit en
    Octobre 2010
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Inde

    Informations professionnelles :
    Activité : DBA Senior Oracle and SQL SERVER
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 416
    Points : 470
    Points
    470
    Par défaut
    Comme cela?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/sh
     
    fromdate=01.04.2010
    todate=24.04.2010
     
    from=`echo $fromdate | awk  -F\. '{print $3 OFS $2 OFS $1}'`
    to=`echo $todate | awk  -F\. '{print $3 OFS $2 OFS $1}'`
     
    ./datecalc -a $to - $from

    cordialement
    Cordialement,
    J'ose espérer que m'a contribution vous a été d'une grande aide.
    Pensez tout de Même à dire MERCI et marquer RESOLU en cas de satisfaction.
    Paul

  3. #3
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Bonjour.

    Citation Envoyé par PaulNero
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./datecalc -a $to - $from
    Ça sort d'où ?

    Sinon une réponse intéressante ici : http://www.developpez.net/forums/d21...x/#post1412881

    Après il y a peut être plus simple...

    Cordialement,
    Idriss

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 97
    Points : 44
    Points
    44
    Par défaut script pour compter les jours entre deux dates (inserer un menu)
    Merci de vos réponses, et serait il possible de coupler se script avec un menu qui proposerait des dates à rentrer?

    Merci d'avance

  5. #5
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Re salut.

    Ben tu reprend les fonctions qui ont été développés dans le script du lien que je t'ai fournis et après au lieu de les appliquer sur des chaînes, tu les appliques sur des variables saisies ou passées en paramètre au script ...

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if [ $# -lt 2 ]; then # Si deux paramètres passés au script
        d1=$1
        d2=$2
    else
        echo "Saisir les dates d1 et d2 :"
        read d1
        read d2
    fi
     
    dateDiff $d1 $d2
    Tu as de quoi faire ton script maintenant avec tout les exemples qui t'ont été fournis. Je te laisse réfléchir pour l'assembler de bout en bout

    Cordialement,
    Idriss

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 97
    Points : 44
    Points
    44
    Par défaut
    Il y a un souci avec la commande dateDiff

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dateDiff: command not found
    J'ai fait ça ci-dessous ça marche très bien mais je galère un peu pour insérer le menu en entrer de script

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/sh
    a=$(date -d "20121010" +%Y%m%d)
    b=$(date -d "20121005" +%Y%m%d)
    let "x=b-a"
    echo $x

  7. #7
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Citation Envoyé par bomonde Voir le message
    dateDiff: command not found
    Euh t'as lu le lien que je t'ai filé précédemment ? On dirait pas

    dateDiff est une fonction de ce script.

    Sinon oui, ta solution semble bien fonctionner. Maintenant tu peux en faire une fonction paramétrée variables sur le même modèle que le script que je te filé :

    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
    #!/bin/bash
     
    dateDiff(){
        d1=$(date -d "$1" +%Y%m%d)
        d2=$(date -d "$2" +%Y%m%d)
        let result=$d1-$d2
        echo $result
    }
     
    if [ $# -ge 2 ]; then # Si deux paramètres passés au script
        d1=$1
        d2=$2
    else
        echo "Saisir les dates d1 et d2 :"
        read d1
        read d2
    fi
     
    dateDiff $d1 $d2
    Exemples d'utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    [idriss@hp-dv6:~]$ ./test.sh 20121010 20121004
    6
    [idriss@hp-dv6:~]$ ./test.sh
    Saisir les dates d1 et d2 :
    20121010
    20121004
    6
    [idriss@hp-dv6:~]$
    Cordialement,
    Idriss

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 97
    Points : 44
    Points
    44
    Par défaut script pour compter les jours entre deux dates
    C'est Ok, merci pour tout Idriss bonne journée à toi, je clos le post

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 97
    Points : 44
    Points
    44
    Par défaut script pour compter les jours entre deux dates
    Le fichier marche bien sur une recherche sur un mois (exemple sh ecart_date.sh 20121010 20121017) mais des que je cherche sur plusieurs mois il me remonte des chiffres incohérents ( ex sh ecart_date.sh 20120101 20121010, il me remonte 909 jours)

    J'ai regardé mais ne vois pas ou est le souci.

  10. #10
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Finalement ça ne m'étonne pas trop qu'une simple soustraction ne suffise pas...

    Je t'invite à regarder le lien que je t'ai filé à nouveau (en particulier la fonction diffDate qui y est présentée).

  11. #11
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par bomonde Voir le message
    Le fichier marche bien sur une recherche sur un mois (exemple sh ecart_date.sh 20121010 20121017) mais des que je cherche sur plusieurs mois il me remonte des chiffres incohérents ( ex sh ecart_date.sh 20120101 20121010, il me remonte 909 jours)

    J'ai regardé mais ne vois pas ou est le souci.
    Ben, le souci, c'est que 20121017 - 20121010 = 909 !

  12. #12
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    En convertissant tes dates en epoch et inversement pour le résultat, ça passe mieux :

    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
     
    $ cat bomonde.sh 
    #!/bin/bash
     
    dateDiff(){
        d1=$(date -d "$1" +%s)
        d2=$(date -d "$2" +%s)
        result=$(date -d "1970-01-01 UTC $((d1-d2-86400)) seconds" +"%j")
        echo ${result}
    }
     
    if [ $# -ge 2 ]; then # Si deux paramètres passés au script
        d1=$1
        d2=$2
    else
        echo "Saisir les dates d1 et d2 :"
        read d1
        read d2
    fi
     
    dateDiff $d1 $d2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $ ./bomonde.sh 
    Saisir les dates d1 et d2 :
    20121010
    20120101
    283
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $ ./bomonde.sh 
    Saisir les dates d1 et d2 :
    20121017
    20121010
    007
     
    $
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  13. #13
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 97
    Points : 44
    Points
    44
    Par défaut Script pour compter les jours
    Oui en effet , merci ca marche tres bien, un grand merci à toi et à Idriss, bonne soirée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer tous les jours entre deux dates
    Par GsusNET dans le forum Développement
    Réponses: 7
    Dernier message: 26/07/2023, 11h44
  2. Lister tous les jours entre deux dates ?
    Par Gigli dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/04/2012, 17h50
  3. Tous les jours entre deux dates
    Par karamurat dans le forum Langage SQL
    Réponses: 6
    Dernier message: 13/01/2011, 15h53
  4. Calculer les jours entre deux dates
    Par Daniela dans le forum SQL
    Réponses: 4
    Dernier message: 09/10/2008, 17h01
  5. Réponses: 2
    Dernier message: 25/02/2008, 23h40

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