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

Langage Delphi Discussion :

Numéro de semaine


Sujet :

Langage Delphi

  1. #1
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut Numéro de semaine
    Salut;

    y a t-il une fonction qui rend le numéro de semaine du mois ainsi que le nombre de semaines de ce mois ?

    Merci d'avance.

  2. #2
    Membre expérimenté
    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 : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Pour le numéro de semaine, tu as la fonction WeekOfTheYear

    [EDIT] WeekOfTheYear renvoi le numéro de semaine dans l'année, et pas dans le mois

    .

  3. #3
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Re;

    merci mais reste quand même la deuxième partie de ma question.

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 435
    Points : 5 848
    Points
    5 848
    Par défaut
    salut

    utilise l'aide de delphi
    dans l'unité dateutils tu as multitude de fonction
    en les combinant tu devrais pouvoir faire ton bonheur

    @+ Phil

  5. #5
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 735
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 735
    Points : 5 406
    Points
    5 406
    Par défaut
    WeeksBetween(DateDebut,Datefin)

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par popo Voir le message
    WeeksBetween(DateDebut,Datefin)
    Ce n'est pas ce que demande Kelloucheaeh !

    WeeksBetween ramène le nombre de semaine séparant 2 dates. Pas grand chose à voir.

    En cherchant un peu dans l'aide on trouve la fonction WeekOfTheMonth, qui devrait être plus proche de son attente.

    @+ Claudius

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 141
    Points : 142
    Points
    142
    Par défaut
    le nombre de semaines de ce mois ?
    Peux-tu être un peu plus précis sur ce qu'est ce nombre?

    D'un certain point de vue, tous les mois contiennent 4 semaines.
    Tu veux renvoyer "31/7" pour les mois à 31 jours, "30/7" pour les mois à 30 jours, et "28/7" ou "29/7" pour février? Tu veux un résultat entier? réel? Tu veux des semaines allant exactement du lundi au dimanche? Le nombre de dimanches/de lundis dans le mois? ...

    *LeGEC*

  8. #8
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Re;

    je me doute quant à ça car y'a des mois qui font 5 semaines.

    je prends un exemple, quand je rentre le 01/11/2008 faut que ma fonction soit capable de me dire que le 01/01/2008 est dans la première semaine du mois de novembre de l'année 2008 et que ce mois fait exactement quatre semaines tout cela dépend bien sûr des optiosn régionales du PC, semaine commencant le lundi ou le samedi.

  9. #9
    Aos
    Aos est déconnecté
    Membre habitué

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Points : 187
    Points
    187
    Par défaut
    Tu as la fonction weekOfTheMonth() dans TDateUtils.

    Extrait de la doc :
    Appelez WeekOfTheMonth pour obtenir la semaine du mois représenté par une valeur TDateTime spécifiée. WeekOfTheMonth renvoie une valeur comprise entre 1 et 6.
    Regardes dans l'aide de delphi, TDateutils regorge d'outils utiles pour la gestion des dates.

  10. #10
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Salut;

    merci je te tiendrais au courant de mon état d'avancement.

  11. #11
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    J'eu travaillé un peu là dessus.

    Ha, voilà, ça peut vous être utile :
    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
    function DMY_to_Date(ADay,AMonth,AYear:Word):TDate;
    begin
      result:=EncodeDate(AYear,AMonth,ADay);
    end;
     
    function DowWY_to_Date(ADayOfWeek,AWeek,AYear:Word):TDate;
    begin
      result:=EncodeDateWeek(AYear,AWeek,ADayOfWeek);
    end;
     
    procedure Date_to_DMY(ADate:TDate;var ADay,AMonth,AYear:word);
    begin
      DecodeDate(ADate,AYear,AMonth,ADay);
    end;
     
    procedure Date_to_DowWY(ADate:TDate;var ADayOfWeek,AWeek,AYear:word);
    begin
      DecodeDateWeek(ADate,AYear,AWeek,ADayOfWeek);
    end;
     
    procedure DMY_to_DowWY(ADay,AMonth,AYear_DMY:Word;var ADayOfWeek,AWeek,AYear_DowWY:word);
    var ADate:TDate;
    begin
      ADate:=DMY_to_Date(ADay,AMonth,AYear_DMY);
      Date_to_DowWY(ADate,ADayOfWeek,AWeek,AYear_DowWY);
    end;
     
    procedure DowWY_to_DMY(ADayOfWeek,AWeek,AYear_DowWY:Word;var ADay,AMonth,AYear_DMY:word);
    var ADate:TDate;
    begin
      ADate:=DowWY_to_Date(ADayOfWeek,AWeek,AYear_DowWY);
      Date_to_DMY(ADate,ADay,AMonth,AYear_DMY);
    end;
    En fait, c'est un ensemble de fonction de conversion entre le systeme TDate de delphi, le système Jour/mois/Annee classique que j'ai intitulé DMY dans mes fonctions (DMY = Day / Month /Year
    et le système "Jour de la semaine"/"Numéro de la Semaine"/"Année", intitulé DowWY (Day of week/Week/Year)

    Par exemple, pour le 30 décembre 2008 (qui est un mardi et fait parti de la semaine 1 de 2009 !), on aura :
    DMY : 30/12/2008
    la procédure DMY_to_DowWY() donnera DowWY : 2/1/2009

    C'est pas grand chose, mais bon, je passais par là

  12. #12
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Tout d'abord merci pour la contribution mais ne trouve-tu pas que c'est étrange que le 30/12/2008 fait partie de la 1ère semaine de l'an 2009?


    Par exemple, pour le 30 décembre 2008 (qui est un mardi et fait parti de la semaine 1 de 2009 !), on aura :
    DMY : 30/12/2008
    la procédure DMY_to_DowWY() donnera DowWY : 2/1/2009

  13. #13
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    En fait, il y a une norme (ISO xxxxx ?) qui définit qu'une semaine comporte au moins 4 jours ! Vive l'école buissonnière ! Comme le 1er janvier 2009 est un jeudi, la première semaine de janvier débute ce jeudi-la !! (jeu --> dim = 4j). Il ne reste plus qu'à compléter la semaine avec les jours manquants : du lun 29/12 au dim 4/01 ... et le tour est joué !

  14. #14
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par Kelloucheaeh Voir le message
    Tout d'abord merci pour la contribution mais ne trouve-tu pas que c'est étrange que le 30/12/2008 fait partie de la 1ère semaine de l'an 2009?
    Hé bien voilà, archonte t'as donné la réponse
    Non, je t'assure, j'ai bien pesé mes mots avant de sortir une "humm" grosse comme moi

    Celà va sans dire, qu'avec cette façon de "dater", qu'il y a aussi des années avec 53 semaines, mais pas en 2008, où il n'y a que 52 semaines "officielle"

    2008 se termine donc le 27 décembre
    C'est dingue non ?

    Tu peux toujours regarder sur différents calendriers d'années différentes pour voir comment ça marche. (cherches donc la semaine n°53 en 2008... y'en a pas )

  15. #15
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    et dire que l'informatique est venue pour résoudre des problèmes et faciliter la vie .

  16. #16
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 949
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 949
    Points : 5 665
    Points
    5 665
    Par défaut
    Heo,
    Citation Envoyé par Kelloucheaeh Voir le message
    et dire que l'informatique est venue pour résoudre des problèmes et faciliter la vie .
    La numérotation des semaines dans l'année n'a pas attendu l'informatique pour exister.

    Comme il existe depuis longtemps une norme pour cette numérotation, l'informatique ne fait que l'appliquer.

  17. #17
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 735
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 735
    Points : 5 406
    Points
    5 406
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Ce n'est pas ce que demande Kelloucheaeh !

    WeeksBetween ramène le nombre de semaine séparant 2 dates. Pas grand chose à voir.

    En cherchant un peu dans l'aide on trouve la fonction WeekOfTheMonth, qui devrait être plus proche de son attente.

    @+ Claudius
    Désolé de devoir te contredire Claudius mais la fonction WeeksBetween à tout à fait sa place ici et je pèse mes mots car pour une application j'ai eu exactement le même besoin.

    Voici de manière simplifié le code que j'ai utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    i := WeeksBetween(StartOfTheMonth(now),EndOfTheMonth(now));
      ShowMessage('Nombre de semaine du mois en cours : ' + IntToStr(i));

  18. #18
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Si c'est le cas alors la faute est à la norme donc faudrait revoir ça en profondeur. Cela me laisse te demander droggo si tu as cette fameuse norme sous les mains ?

    Mais penser que le 30/12/2008 fait partie de la 1ère semaine de l'année 2009 me parait une grande foutaise.

  19. #19
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Re;

    Merci à vous tous, je viens de trouver mon bonheur et de résoudre mon petit problème comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      DecodeDayOfWeekInMonth(DateTimePicker1.DateTime, AYear,AMonth,ANthDayOfWeek,ADayOfWeek);
      Edit1.Text := Format('on est le %d jour de la %d semaine ', [ADayOfWeek, ANthDayOfWeek]);
    Reste une dernière chose, peut-on modifier le 1er jour de la semaine, je voudrais par exemple que ma semaine commence le Mercredi ?

    Merci mille fois.

  20. #20
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    Pour tous ceux qui veulent tout savoir sur les calendriers sans jamais avoir oser le demander ! Et pour ceux qui ont demander les réfernces ! c'est 8601 !

    Ah ! les normes ... sur des choses toutes simples comme les jours de la semaine qu'égraine un écolier en maternelle !! Pas si simple d'après notre ami ISO.

    Pour le rationnel, je vous laisse vous reporter à ISO 8601 ainsi qu'à la Numérotation ISO des semaines de Wikipédia.

    Pour ceux qui ne peuvent se contenter d'un simple calendrier grégorien : voici un algorithme précédé de ses réferences ISO.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Algorithms for the ISO Calendar
    Computer algorithms for implementing the ISO calendar can be found in the literature mentioned here and at the following websites:
     
    ISO 8601 Date and Time - Converting and Implementing: Provides computer algorithms for implementing the ISO 8601 standard. 
     
    ISO Week Date Conversion Algorithm: General algorithm written by Rick McCarty. 
     
    Calculating the ISO Week Number: Algorithm for calculating the ISO week number by Jan M. Stout. 
     
    Delphi32.com: Provides a Delphi source code by Aubrey Dean for the calculating the ISO week number. 
     
    Week Numbers in Excel: Provides Excel codes for several week numbering schemes, including the ISO 8601 standard. 
     
    Calendar Weeks: John Stockton’s webpage on the week contains several other useful computer algorithms.
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    The following JavaScript is valid for all Gregorian calendar years:
    
    function gregdaynumber(year,month,day){ 
      
    // computes the day number since 0 January 0 CE (Gregorian) 
      
      y=year; 
      m=month+1; 
      if(month < 3) y=y-1; 
      if(month < 3) m=m+12; 
      return Math.floor(365.25*y)-Math.floor(y/100)+Math.floor(y/400)+Math.floor(30.6*m)+day-62; 
    }
      
    function isoweeknumber(){ 
      
    // computes the ISO week number of the current date 
      
      var isoweek; 
      
      var today = new Date(); 
      
      year=today.getFullYear(); 
      month=today.getMonth(); 
      day=today.getDate(); 
      wday=today.getDay(); 
      
      wday=((wday+6)%7)+1; // weekdays will be numbered 1 to 7 
      
      yiso=year; 
      
      d0=gregdaynumber(year,1,0); 
      wday0=((d0+4)%7)+1; 
      
      d=gregdaynumber(year,month+1,day); 
      wniso=Math.floor((d-d0+wday0+6)/7)-Math.floor((wday0+3)/7); 
      
    // check whether the last few days of December belong to the next year's ISO week 
      
      if((month == 11) && ((day-wday) > 27)){ 
        wniso=1; 
        yiso=yiso+1; 
      } 
      
    // check whether the first few days of January belong to the previous year's ISO week 
      
      if((month == 0) && ((wday-day) > 3)){ 
        d0=gregdaynumber(year-1,1,0); 
        wday0=((d0+4)%7)+1; 
        wniso=Math.floor((d-d0+wday0+6)/7)-Math.floor((wday0+3)/7); 
        yiso=yiso-1; 
      } 
      
      if(wniso < 10) return yiso+"-W0"+wniso+"-"+wday; 
      if(wniso > 9) return yiso+"-W"+wniso+"-"+wday; 
    }
    
    The following Mathematica procedures, written in 2001 by Fons van Hees of the High Performance Computing Group of the Faculty of Physics and Astronomy of the Utrecht University, may also be useful:
    
    <<Miscellaneous'Calendar' 
      
    WeeksInISOYear[year_]:= 52 
    WeeksInISOYear[year_]:= 53 /; 
         DayOfWeek[{year,1,1}] == Thursday || 
         DayOfWeek[{year,12,31}] == Thursday 
      
    WeekOfISOYear[date_]:= Module[{year,days,startDate}, 
    year = date[[1]]; 
    days = {{year-1,12,29}, 
                {year-1,12,30}, 
                {year-1,12,31}, 
                {year,1,1}, 
                {year,1,2}, 
                {year,1,3}, 
                {year,1,4}}; 
    startDate = Select[days,DayOfWeek[#] == Monday &] [[1]]; 
    week = Ceiling[(1+DaysBetween[date,startDate])/7]; 
    If[week > WeeksInISOYear[year],week = 1]; 
    week]

Discussions similaires

  1. [Crystal] transformation d'une date en numéro de semaine
    Par barna dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 24/03/2017, 09h41
  2. [C#] Comment récupérer le numéro de semaine d'une date ?
    Par farfadet dans le forum Windows Forms
    Réponses: 9
    Dernier message: 17/07/2013, 16h33
  3. [excel]calcul du numéro de semaine
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 13/10/2005, 11h57
  4. [Calendar] Problème de numéro de semaine de l'année
    Par gaia_dev dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 29/11/2004, 11h44
  5. Calcul des numéros de semaine d'un calendrier
    Par Invité dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 06/11/2002, 21h29

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