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

 Delphi Discussion :

calculer le nombre de jour,moi,annee entre deux dates


Sujet :

Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    agent de fisc(les impots)
    Inscrit en
    Juillet 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : agent de fisc(les impots)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 427
    Points : 111
    Points
    111
    Par défaut calculer le nombre de jour,moi,annee entre deux dates
    salut tout le monde
    existe'il une fonction qui me permet de calculer le nombre de jour,moi,annee entre deux dates donnee.
    voila mon idee:
    en devise le nombre de jour entre ces deux dates sur 365 pour trouver le nombre d'annee,le reste de ce calcule en le devise sur 30 pour trouver le nombre de moi et le reste de ce calcule ces le nombre de jour
    ma question est ce que cette idee est juste car jais un souci dans le cas ou il ya 28 jour dans le moi de fevrier
    merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    DaySpan
    DayBetween
    ...
    Pense que la partie Entière c'est déjà le nombre de jour !
    Ensuite exprimer une Durée en Jour, Mois, Année, n'est pas évident !

    Le sujet nombre exact de mois entre deux dates calendaires?

    Essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DayDiff := DaySpan(Date1, Date2);
    DateDiff := IncDay(0, DayDiff);
    DecodeDateFully(DateDiff, Year, Month, Day, DOW);
    Évidemment cela utilisera le calendrier depuis 1900, tu auras un résultat assez médiocre si le délai est inférieur à 4 ans car c'est prévu pour décoder une Date mais pas une Durée !
    La solution par Modulo\Division doit fonctionner mais utilise les constantes ApproxDaysPerMonth et ApproxDaysPerYear, qui fournisse une valeur moyenne !
    Idem, ces constantes ne sont fiables que pour un délai supérieur à 4 ans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      { average over a 4 year span }
      ApproxDaysPerMonth: Double = 30.4375;
      ApproxDaysPerYear: Double  = 365.25;
     
      { The above are the average days per month/year over a normal 4 year period. }
      { We use these approximations because they are more accurate for the next }
      {  century or so.  After that you may want to switch over to these 400 year }
      {  approximations... }
      {    ApproxDaysPerMonth = 30.436875 }
      {    ApproxDaysPerYear  = 365.2425 }
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 427
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 427
    Points : 1 326
    Points
    1 326
    Par défaut
    @ kroma23, j'avais travaillé sur une fonction du temps de D3, elle tient compte des années Bissextiles.

    2 TDateTimePicker;
    1 TLabel

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    type 
      TJJMMAA = record 
                  JJ, 
                  MM, 
                  AA : word; 
                end; 
     
    function CalculEcart(const CDate1, CDate2 : TDate) : TJJMMAA;
     
    var 
      Date1, 
      Date2, 
      WDate : TDate; 
      WMois: word; 
     
    begin 
      if CompareDate(CDate1, CDate2) > 0 then begin  // si 2ème date < 1ère on intervertit pour le 
     
    traitement 
        Date1 := CDate2; 
        Date2 := CDate1; 
      end 
      else begin 
        Date1 := CDate1; 
        Date2 := CDate2; 
      end; 
      with result do begin 
        JJ := 0; 
        MM := 0; 
        AA := 0; 
        WDate := Date1;                        // on stocke la 1 ère date pour la restituer après 
     
    dépassement 
        if (Yearof(Date2) > yearof(Date1)) then AA := Yearof(Date2) - Yearof(Date1); 
        if (Monthof(Date2) < Monthof(Date1)) then dec(AA); 
        if (Monthof(Date1) < Monthof(Date2)) then MM := Monthof(Date2) - Monthof(Date1); 
        if (Monthof(Date1) > Monthof(Date2)) then MM := 12 + Monthof(Date2) - Monthof(Date1); 
        if (Dayof(Date1)   > Dayof(Date2))   then begin 
          if MM = 0 then begin 
            dec(AA); 
            MM := 12; 
          end; 
          dec(MM); 
        end; 
        if (Dayof(Date2)   > Dayof(Date1))   then begin 
        JJ := DayOf(Date2) - DayOf(Date1); 
        end; 
        if (Dayof(Date2)   < Dayof(Date1))   then begin    
          JJ := DaysInAMonth(YearOf(Date1), MonthOf(Date1)) - DayOf(Date1) + DayOf(Date2); 
        end; 
      end; 
    end;
    Utilisation :

    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
     
    procedure Tfrecherche.BcalculClick(Sender: TObject);
    var 
      texte : string;  //  Utilisé pour la construction du resultat 
      Delta : TJJMMAA;  //  retourné par la fonction CalculEcart 
     
    begin 
      Delta := CalculEcart(DateTimePicker1.date, DateTimePicker2.date); // appel de la fonction
    // mise en forme du résultat 
      texte := ''; 
      with Delta do begin 
        case JJ of                     // si au moins un jour on l'affiche en l'accordant en nombre 
          0 : ; 
          1 : texte := '1 jour'; 
        else 
          texte := format('%2d jours', [JJ]); 
        end; 
        if MM > 0 then                 // si au moins un mois on l'affiche, 'mois' se terminant par 
     
    un 's' pose moins de problème! 
          if texte = '' then 
            texte := format('%2d mois', [MM]) 
          else 
            texte := format('%2d mois, ', [MM]) + texte; 
        if (AA > 0) and 
           (Texte <> '') then 
          Texte := ', ' + Texte; 
        case AA of                    // si au moins un an on l'affiche en l'accordant en nombre 
          0 : ; 
          1 : texte := '1 an' + Texte; 
        else 
          texte := format('%2d ans', [AA]) + Texte; 
        end; 
        if CompareDate(DateTimePicker1.date, DateTimePicker2.date) > 0 then // si la 1ère date est 
     
    postérieure à la seconde
          Label1.Caption := 'Dépassé depuis ' + Texte
        else
          Label1.Caption := 'Il s''est écoulé ' + Texte;
         // edit1.text := 'Il s''est écoulé ' + Texte;
      end;  
     
    end;
    @+,

    Cincap

Discussions similaires

  1. Calcul en nombre de jours l'écart entre deux dates
    Par theber dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 05/12/2014, 07h57
  2. Réponses: 4
    Dernier message: 15/05/2014, 07h51
  3. [XL-2007] calcul jour,moi,annee entre deux date
    Par kroma23 dans le forum Excel
    Réponses: 2
    Dernier message: 25/11/2011, 19h08
  4. Calcul du nombre de jours non ouvrés entre deux dates
    Par allweneed dans le forum Oracle
    Réponses: 6
    Dernier message: 27/04/2010, 17h34
  5. Réponses: 2
    Dernier message: 02/07/2007, 16h52

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