Afficher les date du mois encours [Résolu]

bir-ntic 2 Messages postés jeudi 12 janvier 2017Date d'inscription 2 mars 2017 Dernière intervention - 12 janv. 2017 à 16:28 - Dernière réponse : dubois77 670 Messages postés jeudi 17 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention
- 14 janv. 2017 à 17:28
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
Afficher la suite 

7 réponses

Répondre au sujet
dubois77 670 Messages postés jeudi 17 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 13 janv. 2017 à 08:31
0
Utile
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)
Commenter la réponse de dubois77
korgis 392 Messages postés samedi 17 mai 2003Date d'inscription 24 novembre 2017 Dernière intervention - 13 janv. 2017 à 13:47
0
Utile
Salut,

Tout à fait, le point un peu délicat à déterminer étant la valeur maximale de la boucle : 31, 30, 29 (IsLeapYear), 28.
Commenter la réponse de korgis
0
Utile
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;
@+
Commenter la réponse de Yanb
dubois77 670 Messages postés jeudi 17 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 13 janv. 2017 à 17:28
0
Utile
Il est gâté Bir-ntic !
mais il est devenu muet ?
Commenter la réponse de dubois77
Cirec 4191 Messages postés vendredi 23 juillet 2004Date d'inscriptionModérateurStatut 12 décembre 2017 Dernière intervention - 14 janv. 2017 à 14:18
0
Utile
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 ;)
Commenter la réponse de Cirec
korgis 392 Messages postés samedi 17 mai 2003Date d'inscription 24 novembre 2017 Dernière intervention - 14 janv. 2017 à 16:28
0
Utile
1
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

dubois77 670 Messages postés jeudi 17 avril 2008Date d'inscription 10 décembre 2017 Dernière intervention - 14 janv. 2017 à 17:28
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
Commenter la réponse de korgis

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.