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 :

durée entre deux dates


Sujet :

Delphi

  1. #1
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut durée entre deux dates
    bonjour tout le monde ,

    voila j'aimerais calculé a partir de deux dates mais en enlevant le jeudi et le vendredi j'ai un exemple mais qui calcul le nombre de dimanche puis je ladapté ????

    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
     
    var
      Days, Sundays, DayOfWeek1: Integer;
    begin
      DayOfWeek1 := DayOfWeek(d1);
      if (DayOfWeek1 = 1) or (DayOfWeek(d2) = 1) then
        ShowMessage('Les dimanches ne sont pas pris en compte !')
      else if D1 > D2 then
        ShowMessage('La première date doit être antérieure à la seconde')
      else
      begin
        //Days := DaysBetween(d2, d1);
        Days := Trunc(d2 - d1); // pour les pauvres Delphi 4
        Sundays := Days div 7;
        if (Days mod 7) <> 0 then
          if (DayOfWeek1 xor 7 < Days div 7) then
            inc(Sundays);
        Result := Format('%d jour(s) dont %d dimanche(s)', [Days, Sundays]);
      end;
    end;
    merci a tous

  2. #2
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 241
    Points : 204
    Points
    204
    Par défaut
    Bonjour lila vous voulez calculer quoi exactement ?

  3. #3
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut
    j'aimerais calculé le nombre de jours entre deux dates mais je ne prend pas en compte ni le jeudi ni le vendredi

    exemple entre le 21/03/2009 et le 31/03/2009 j'ai en tout 11jours mais dont 2jours que je ne dois pa prendre en compte donc je devrais par mé calcul avoir le résultat égal a 9

    merci

  4. #4
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut
    voila comment j'ai modifié le code que je vous ai mis au début

    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
     
    procedure TForm4.Button7Click(Sender: TObject);
    var
      Days, jeudi, vendredi, DayOfWeek1: Integer;
      d1,d2 :Tdate;
      Result: integer;
      begin
      edit8.Text:=maskedit5.Text;
      d1:=StrtoDate(edit8.Text);
      edit9.Text:=maskedit6.Text;
      d2:=StrtoDate(edit9.Text);
      DayOfWeek1 := DayOfWeek(d1);
      if (DayOfWeek1 = 1) or (DayOfWeek(d2) = 1) then
        ShowMessage('Les jeudi ne sont pas pris en compte !')
      else if d1 > d2 then
        ShowMessage('La première date doit être antérieure à la seconde')
      else
      begin
        //Days := DaysBetween(d2, d1);
        Days := Trunc(d2 - d1)+2; // pour les pauvres Delphi 4
       jeudi := Days div 7;
       vendredi := Days div 7;
        if (Days mod 7) <> 0 then
          if (DayOfWeek1 xor 7 < Days div 7) then begin
            inc(jeudi);
            inc(vendredi); end;
        result:= (Days-(jeudi+vendredi))+1;
        edit11.Text:=inttostr(result);
      end;
    end;
    est ce que c'est juste comme ca????

  5. #5
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 241
    Points : 204
    Points
    204
    Par défaut
    re lila je vais essayer de teste votre code pour l'instant voilà une solution pour votre pb
    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
    var i : integer;
        j : integer;
        jour : string;
    begin
      i := 0;
      j := 0;
     
          DateTime3.DateTime := DateTime1.DateTime;
          DateTime4.DateTime := IncDay(DateTime2.DateTime, 1);
          if DateTime1.DateTime>DateTime2.DateTime then
            begin
              gb_resultat.Visible := false;
              // Messagedlg : Affiche une boîte de dialogue de message au centre de l'écran.
              MessageDlg('La date de début doit être inférieure à la date de fin !',
               mterror,[mbOk],0);
            end
              else
                Repeat
                  // FormatDateTime : Formate un objet TDateTime.
                  jour := FormatDateTime('dddd',DateTime3.DateTime);
     
                  if (jour = 'jeudi') OR (jour = 'vendredi') Then
                    begin
                      j := j+1;
                      DateTime3.DateTime := IncDay(DateTime3.DateTime, 1);
                      // IncDay : Renvoie une date décalée d'un certain nombre de jours.
                   end
                else
                  begin
                    i := i+1;
                    DateTime3.DateTime := IncDay(DateTime3.DateTime, 1);
                  end;
                  // CompareDate : Indique la relation entre les parties date
                  // de deux valeurs TDateTime.
                Until CompareDate(DateTime3.DateTime,DateTime4.DateTime) = 0;
                //le nombre de jour entre les deux date moins le nombre des jeudi et     
                  vendredi est égale à i
     end;

  6. #6
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut
    merci sam de ta réponse c'est trés gentil a toi

    j'attend que tu testes mon code ok?

    merci

  7. #7
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 241
    Points : 204
    Points
    204
    Par défaut
    lila voilà j'ai testé votre méthode en fait j'ai deux remarques a faire
    la fonction DayOfWeek renvoi le numéro de jour avec Dimanche comme 1 jour de la semaine donc dans le teste suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (DayOfWeek1 = 1) or (DayOfWeek(d2) = 1)
    il faut mettre 5 à la place de 1 de plus a cause de cette condition lorsque l'une des deux date de calcule correspond a un jeudi la méthode ne donne pas de résultat mais il renvoi le message les " Les jeudi ne sont pas pris en compte !"
    ainsi voilà votre nouveau code
    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
    var
      Days, jeudi, vendredi, DayOfWeek1: Integer;
      d1,d2 :Tdate;
      Result: integer;
      begin
      edit1.Text:=maskedit1.Text;
      d1:=StrtoDate(edit1.Text);
      edit2.Text:=maskedit2.Text;
      d2:=StrtoDate(edit2.Text);
      DayOfWeek1 := DayOfWeek(d1);
       if d1 > d2 then
        ShowMessage('La première date doit être antérieure à la seconde')
      else
      begin
        //Days := DaysBetween(d2, d1);
        Days := Trunc(d2 - d1); // pour les pauvres Delphi 4
       jeudi := Days div 7;
       vendredi := Days div 7;
        if (Days mod 7) <> 0 then
          if (DayOfWeek1 xor 7 < Days div 7) then begin
            inc(jeudi);
            inc(vendredi); end;
        result:= (Days-(jeudi+vendredi))-1;
        edit3.Text:=inttostr(result);
      end;
    end;

  8. #8
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut
    merci sam davoir testé mon code c'est gentil a toi!!!! normalement comme ca ca marche

    encore merci

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

Discussions similaires

  1. [DeskI V5-V6] Calcul durée entre deux dates
    Par imslux dans le forum Débuter
    Réponses: 1
    Dernier message: 24/07/2013, 15h47
  2. [Débutant] durée entre deux date
    Par Alfred86 dans le forum VB.NET
    Réponses: 6
    Dernier message: 17/06/2012, 22h03
  3. Durée entre deux dates et heure
    Par Deciprog dans le forum SAS Base
    Réponses: 6
    Dernier message: 10/12/2009, 21h48
  4. Calcul de la durée entre deux dates
    Par parab dans le forum IHM
    Réponses: 13
    Dernier message: 05/11/2008, 16h08
  5. Réponses: 10
    Dernier message: 14/12/2007, 15h13

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