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

C++Builder Discussion :

Différence entre deux dates


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 115
    Par défaut Différence entre deux dates
    Bonjours à tous,

    j'ai besoin d'un petit coup de main. L'opération me semblait pas si difficile mais j'ai beaucoup de mal.

    En faite je cherche à savoir combien de jours, de mois et d'années il y a entre 2 dates données.

    Exemple : la différence entre le 27/01/1999 et le 30/08/2010 est de 3 jours 8 mois et 11 ans.

    Et si possible faut tenir compte des années bissextile et non ;-)

    Merci d'avance a tous

  2. #2
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Citation Envoyé par LoicH Voir le message
    Exemple : la différence entre le 27/01/1999 et le 30/08/2010 est de 3 jours 8 mois et 11 ans.
    Ce ne serait pas plutôt 11 ans, 7 mois et 3 jours?

    Un code à tester, mais qui semble fonctionner pour l'exemple donné:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      TDate d1, d2 ; 
      d1 = //...
      d2 = //...
      unsigned short y1, m1, d1, y2, m2, d2 ;
      DecodeDate( d1, y1, m1 ,d1 );
      DecodeDate( d2, y2, m2 ,d2 );
     
      Edit1->Text = IntToStr( abs(y1- y2) ) ;  // année          
      Edit2->Text = IntToStr( abs(m1- m2) ) ;  // mois
      Edit3->Text = IntToStr( abs(d1- d2) ) ;  //jours

    Pour simplement obtenir le nombre de jour d'écart entre deux dates :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TDate d1, d2 ; 
      d1 = //...
      d2 = //...
      Edit4->Text = IntToStr( (int)d2 - (int)d1 ) ;

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 115
    Par défaut
    Oui désolé tu as raison c'est bien 7mois et non 8 ... lol

    Part contre y a de l'idée dans ce que tu m'as donnée mais sa risque de pas marcher tout le temps.

    Pour se qui est des années pas de soucis tu peux bien faire cela. Car la seconde année sera toujours plus élevée que la première

    Part contre pour les mois et jours cela ne fonctionne que si le premier moi et jour est inférieur au second.
    Explications (je prend d'autres dates) :

    27/05/1984 et 14/02/1988

    1988-1984 = 4 ans (cela fonctionnera)
    02-05 = -3 mois (là petit bug)
    14-27 = -13 jours (là aussi petit bug)

    Merci encore. C'est une idée j'y avait pas pensée. Faut juste que je trouve pour les mois et jours.
    Dommage qu'il n'y ai pas de fonction pour cela

  4. #4
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Effectivement ca ne fonctionne pas, le calcul doit être un peu plus compliqué!

    Même pour les année ce n'est pas bon (dans l'exemple que tu donne, on trouve 4ans, alors qu'il n'y a que 3 ans, 8 mois et 18 jours)

  5. #5
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Je me suis plongé dans ton problème, et j'ai bricolé une fonction qui a priori semble fonctionner sur les quelques essais que j'ai fais (il faudrait s'amuser a tester sur une série exhaustive de dates):

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    void DatesInterval( TDate date1, TDate date2, int &Y, int&M, int &D )
    {
      int dMax = (int)date1 ;
      int dMin = (int)date2 ;
    // inversion des dates (si nécessaire)
      if( dMin > dMax )
      {
        int tmp = dMax ;
        dMax = dMin ;
        dMin = tmp ;
      }
    //décodage des dates
      unsigned short y1, m1, d1, y2, m2, d2 ;
      DecodeDate( dMax, y1, m1 ,d1 );
      DecodeDate( dMin, y2, m2 ,d2 );
     
      int dInterval = d1-d2 ;
      int mInterval = m1-m2 ;
      int yInterval = y1-y2 ;
     
      if( mInterval<0 ) //on a pas une année complète
      {
        yInterval = yInterval - 1; //on décrémente les années
        mInterval = 12 + mInterval ; 
      }
     
      if( dInterval<0 ) //on a pas un mois complet
      {
        mInterval = mInterval - 1 ; // on décrémente les mois
        m1 = m1 - 1 ;
        if( (m1==1)||(m1==3)||(m1==5)||(m1==7)||(m1==8)||(m1==10)||(m1==0) )
          dInterval = 31 + dInterval ; //mois de 31 jours
        if( (m1==4) || (m1==6) || (m1==9) || (m1==11) )
          dInterval = 30 + dInterval ;//mois de 30 jours
        if( (m1==2) && IsLeapYear( y1 ) )
          dInterval = 29 + dInterval ; //mois de 29 jours
        if( (m1==2) && !IsLeapYear( y1 ) )
          dInterval = 28 + dInterval ;  // mois de 28 jours
      }
     
      Y = yInterval ;
      M = mInterval ;
      D = dInterval ;
    }
    A utiliser comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      TDate d1, d2 ;
      int years, months, days ;
      DatesInterval( d1, d2, years, months, days ) ;
      Edit2->Text = IntToStr( years ) ;
      Edit3->Text = IntToStr( months ) ;
      Edit4->Text = IntToStr( days  ) ;

  6. #6
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Salut, ajoute ceci a ton projet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include <DateUtils.hpp>
    Tu auras accès a tout ces fonctions:
    • DaysBetween
    • MilliSecondsBetween
    • MinutesBetween
    • HoursBetween
    • SecondsBetween
    • WeeksBetween
    • MonthsBetween

    Ces fonction compare deux objets TDateTime pour te donner le résultat dans un unité de temps.

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