Afficher les date du mois encours [Résolu]

Signaler
Messages postés
2
Date d'inscription
jeudi 12 janvier 2017
Statut
Membre
Dernière intervention
2 mars 2017
-
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
-
slt, je travail sur un projet et j'aimerai savoir comment afficher les date correspondant à un jour de la semaine. par exemple afficher tout les jeudi du mois

6 réponses

Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
13
Salut
La fonction DayOfWeek(Date) renvoie le numéro du jour de la semaine : 1=dimanche, 2=Lundi, 3=Mardi ...
En faiasnt une boucle sur les 30 jours du mois tu peux facilement détecter tous les jeudis (DayOfWeek(Date) = 5)
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
Salut,

Tout à fait, le point un peu délicat à déterminer étant la valeur maximale de la boucle : 31, 30, 29 (IsLeapYear), 28.
Salut
dans les uses ajoute DateUtils...
exemple rapide de quelques fonctions...
uses
  DateUtils
...
procedure TForm1.Button1Click(Sender: TObject);
var
  T : TDateTime;
begin
  T := StrTodatetime('11/01/2017');
  ShowMessage(Format('Jour : %d',[DayOf(T)]));
  ShowMessage(Format('Mois : %d',[MonthOf(T)]));
  ShowMessage(Format('Année : %d',[YearOf(T)]));
  ShowMessage(Format('Nombre de jour dans le mois : %d',[DaysInMonth(T)]));
  ShowMessage(Format('Jour de la semaine 1 (Dimanche) 2 (Lundi)...: %d',[DayOfWeek(T)]));
  case DayOfWeek(T) of
    1 : ShowMessage('Dimanche');
    2 : ShowMessage('Lundi');
    3 : ShowMessage('Mardi');
    4 : ShowMessage('Mercredi');
    5 : ShowMessage('Jeudi');
    6 : ShowMessage('Vendredi');
    7 : ShowMessage('Samedi');
  end;
end;
@+
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
13
Il est gâté Bir-ntic !
mais il est devenu muet ?
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
44
Il est gâté Bir-ntic !


et c'est pas fini ^^
  ...
uses DateUtils;
  ...
{
********************************************************************************
********************************************************************************
procedure GetDaysOfMonth : retrouve tous les mêmes jours d'un mois donné
  Year: l'année à tester
  Month: le mois
  Day: le jour de la semaine recherché de 1 = Dimanche à 7 = Samedi

  Days: Contient le résultat
********************************************************************************
********************************************************************************
}

procedure GetDaysOfMonth(Year, Month, DayOf: Word; const Days: TStrings);
var
  T: TDateTime;
  Day, MemMonth: Word;
begin
  Day := 1;
  T := StrTodatetime(Format('%d/%d/%d', [Day, Month, Year]));
  while DayOfWeek(T) <> DayOf do T := IncDay(T);
  DecodeDate(T, Year, Month, Day);
  MemMonth := Month;
  Days.BeginUpdate;
  try
    while IsValidDate(Year, Month, Day) and (MemMonth = Month) do begin
      Days.Add(FormatDateTime('DDDD dd mmmm yyyy', T));
      T := IncDay(T, 7);
      DecodeDate(T, Year, Month, Day);
    end;
  finally
    Days.EndUpdate;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Clear;
  GetDaysOfMonth(2017, 12, 1, Memo1.Lines);
end;



l'exemple donne tous les Dimanches du mois de Décembre 2017

si tu veux tous les Jeudi du mois de Juin :
GetDaysOfMonth(2017, 6, 5, Memo1.Lines);


voilà ça devrait faire l'affaire ^^

ps: la fonction IsValidDate n'est pas forcément utile mais comme ça ne coute quasiment rien je l'ai laissé ;)

Bon sur ce ... j'ai du pain sur la planche ...
@Dubois77 j'ai vu ton code et j'ai une alternative pour toi ... je j'espère pouvoir poster ce weekend encore ;)
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
Il est gâté Bir-ntic !

(même s'il s'en fiche)

J'avais cette approche sous le coude, un poil différente.
Ici pas d'appel à DateUtils, on fait (presque tout) soi-même... ;-)
Alors voilà, c'est pour pas gaspiller :

procedure DaysOfWeekInMonth(var Year, Month, TheDayOfWeek: Word; const Dates: TStrings);
const
  Days31 = [1, 3, 5, 7, 8, 10, 12];
  Days30 = [4, 6, 9, 11];
var
  i: Integer;
  DayMax: Word;
  ADate: TDate;
begin
  Dates.Clear;
  if (TheDayOfWeek > 7)
  or (TheDayOfWeek = 0)
  or (Month > 12)
  or (Month = 0)
  or (Year = 0) then            // données non valides
    Exit;
  if Month in Days31 then       // mois de 31 jours
    DayMax := 31
  else if Month in Days30 then  // mois de 30 jours
    DayMax := 30
  else if Month = 2 then        // mois de février
  begin
    if IsLeapYear(Year) then    // année bissextile, mois de 29 jours
      DayMax := 29
    else                        // mois de 28 jours
      DayMax := 28;
  end;
  for i := 1 to DayMax do
  begin
    ADate := EncodeDate(Year, Month, i);
    if DayOfWeek(ADate) = Word(TheDayOfWeek) then
      Dates.Append(DateToStr(ADate));
  end;
end;

"@Dubois77 j'ai vu ton code et j'ai une alternative pour toi ... je j'espère pouvoir poster ce weekend encore ;)"

A force, le code à Dubois, il va plus ressembler au code à Dubois, si on n'arrête pas tous d'y mettre notre grain de sel... ^^

Bon week-end delphiste et studieux à tous ;-P

Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
13
et oui Korgis, mais c'est le but du jeu non !
ça change des devoirs d'école
et ça nous rajeunit (on se croirait au bon temps de DelphiFr