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 :

nombre de semaines dans un mois ? [FAQ]


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 98
    Par défaut nombre de semaines dans un mois ?
    Bonjour, comment calculer le nombre de semaines entre deux dates ?
    Un précédent collègue avait codé la chose suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    n := trunc(DateFin) - trunc(DateDebut);
    NbSem := n div 7;
    if n mod 7 > 0 then inc(NbSem);
    Mais le résultat est faux.
    Par exemple cela me donne 5 semaines pour le mois de juillet alors que le mois de juillet s'étale sur 6 semaines du dimanche 1er juillet au mardi 31 juillet.

    Merci de votre aide, je suis sûre que c simple mais j'ai le cerveau trop ramolli pour réfléchir (semaine très difficile)

    Isa

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 10
    Par défaut
    regarde du coté de WeeksBetween() avec uses DateUtils;

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 98
    Par défaut
    Merci beaucoup, mais cela ne convient pas.
    En effet entre le 01/07/2007 et le 31/07/2007 le fonction WeeksBetween() me renvoie 4 (c.a.d. le nb de semaines complètes entre ces deux dates)
    Le nb que je souhaite obtenir est 6 (nb de semaines complètes ou incomplètes entre ces deux dates)
    Bon je vais prendre un café et faire fonctionner les neurones qui me restent

    Isa

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 25
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    showmessage(
    floattostr(
    ceil(weekspan(strtodate('01/07/2007'),endoftheWeek(strtodate('01/07/2007'))))
    +
    ceil(weekspan(StartoftheWeek(strtodate('31/07/2007')),(strtodate('31/07/2007'))))
    +
    weeksBetween(strtodate('01/07/2007'),strtodate('31/07/2007'))
    )
    );

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Par défaut
    Bonjour,

    aide Delphi7 en français

    WeekOfTheMonth,fonction
    Renvoie la semaine du mois représentépar une valeur TDateTime.

    Unité

    DateUtils

    Catégorie

    routines date/heure

    Syntaxe Delphi :

    function WeekOfTheMonth(constAValue:TDateTime):Word;overload;
    function WeekOfTheMonth(constAValue:TDateTime;varAYear,AMonth:Word):Word;overload;

    Syntaxe C++:

    extern PACKAGE Word__ fastcallWeekOfTheMonth(constSystem::TDateTimeAValue);
    extern PACKAGE Word__ fastcallWeekOfTheMonth(constSystem::TDateTimeAValue,Word &AYear,Word &AMonth);

    Description

    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.

    AYear et AMonth renvoient l'année et le mois dans lesquels WeekOfTheMonth tombe.Ces valeurs peuvent différer de l'année et du mois de AValue.En effet,la première semaine d'un mois est la première qui contient au moins quatre jours dans ce mois.Par conséquent,si le premier jour du mois est vendredi,samedi ou dimanche,le premier,les deux premiers ou les trois premiers jours du mois appartiennent àla dernière semaine du mois antérieur.De même,si le dernier jour du mois est lundi,mardi ou mercredi,le dernier,les deux derniers ou les trois derniers jours du mois appartiennent à la première semaine du mois suivant.

    Conseil : Pour compter des semaines basées sur le jour de la semaine de la valeur date et heure,utilisez plutôt la fonction NthDayOfWeek.Par exemple,si AValue représente un samedi qui est le premier jour du mois,WeekOfTheMonth renvoie 5 (ou bien 4),en indiquant la dernière semaine du mois précédent,tandis que NthDayOfWeek renvoie 1 lorsque AValue est le premier samedi du mois .

    Remarque : WeekOfTheMonth définit la semaine d'après la norme ISO 8601 :la semaine commence le lundi et s'achève le dimanche.

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    Bonjour,

    Tu peux trouver ici :

    http://www.developpez.net/forums/sho...ight=deux+Date
    la fonction d'e-ric 18/08/2006, 14h22 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function DaysBetween(const ANow, AThen: TDateTime): Integer; 
    begin    Result := Abs(Trunc(AThen) - Trunc(ANow)); 
    end;
    qui donne le nombre de jours moins 1 entre deux dates
    ... suffit de remplacer ANow, AThen par ADate1, ADate2
    ... puis connaissant le nombre de jours tu peux calculer le nb de semaines complètes ou incomplètes.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 98
    Par défaut
    Re-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NbSem :=  ceil(WeekSpan(trunc(StartoftheWeek(DateDebut)),trunc(endoftheWeek(DateFin))));
    semble donner un résultat correct.

    Merci

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    Re-Salut,

    Isachat666 a écrit :
    .. , mais cela ne convient pas.
    En effet entre le 01/07/2007 et le 31/07/2007 le fonction WeeksBetween() me renvoie 4 (c.a.d. le nb de semaines complètes entre ces deux dates)
    Le nb que je souhaite obtenir est 6 (nb de semaines complètes ou incomplètes entre ces deux dates)
    ... comment peux-tu souhaiter obtenir le nb 6 semaines alors qu'il n'y en a que 4 et 2 jours entre les dates indiquées ??

    Test effectué avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function DaysBetween(const ADate1, ADate2: TDateTime): Integer;
    begin    Result := Abs(Trunc(ADate2) - Trunc(ADate1)) +1 ;
    end;
    et avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
              ...
              nbJours:=DaysBetween(strtodate('01/07/2007'),strtodate('31/07/2007 '));
              nbSem:=nbJours/7;
              showMessage(floatToStr(nbSem));
    ... résultat : affiche 4,428 semaines.
    A+

    EDIT : ai été pris de vitesse.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Par défaut
    Normalement la norme Iso ????? indique qu'une semaine appartient au mois qui contient au moins 4 jour de la semaine.

    Si 1 mois commence le Jeudi, La 1° semaine du mois commence le 1° du mois.
    Si le mois commence le vendredi, La 1° semaine du mois commence le Luni 4 du mois.

    Par conséquence, 1 mois peut avoir jusqu 'a 6 semaines.

    Le problème est de calculer le nombre de semaine dans un mois, de fçon a ce que la somme de toutes les nombres de semaine de tout les mois d'une années soit le nombre de semaine de l'année.

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

Discussions similaires

  1. [Dates] Nombre de semaines dans le mois
    Par Prosis dans le forum Langage
    Réponses: 7
    Dernier message: 05/03/2016, 11h10
  2. Réponses: 1
    Dernier message: 28/06/2009, 08h56
  3. [Dates] Calculer le nombre de jours dans le mois suivant...
    Par Life Hunter dans le forum Langage
    Réponses: 5
    Dernier message: 14/03/2006, 00h01
  4. Nombres de lundis dans un mois.
    Par Celelibi dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 24/09/2005, 16h50
  5. [CR]nombre de jours dans un mois donné
    Par liberio dans le forum Formules
    Réponses: 2
    Dernier message: 20/04/2004, 16h54

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