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:
    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. 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