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

WinDev Discussion :

Nombre de jours ouvrés entre 2 dates


Sujet :

WinDev

  1. #1
    Membre éprouvé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 336
    Par défaut Nombre de jours ouvrés entre 2 dates
    Bonjour,

    Je recherche comment calculer le nombre de jours ouvrés entre 2 dates.

    J'arrive à calculer le nombre de jours avec DateDifférence(), mais c'est tout.

    Quelqu'un a-t-il un moyen?

    Merci d'avance.

  2. #2
    Membre expérimenté

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2010
    Messages : 125
    Par défaut
    Malheureusement, je ne vois pas comment tu pourrais faire ça sans passer par une table qui te donne les jours ouvrés existants entre tes deux dates...
    J'avais développé une appli il y a longtemps qui faisait ça pour de la GMAO. On avait une table qui contenait uniquement les jours non ouvrés (une date sous forme de clé par exemple) et je faisais un count sur cette table avec comme condition la date de début et la date de fin. le count te renvoie donc le nbre de jours non ouvrés. il ne te reste qu'à faire la différence avec ton datedifference pour avoir le nbre de jours ouvrés.

    Si cela peut t'aider,

    Cordialement.

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Par défaut
    DateVersJour() permet de savoir à quel jour de la semaine correspond une date. À partir de là, il n'y a plus que les jours fériers à gérer.

    Il y a aussi des calculs de ce type dans les exemples :
    - Exemple planning: création d'une table des jours fériés et exceptions.
    - Exemple Congés Payés: calcul automatique des jours fériés.

  4. #4
    Membre Expert Avatar de EDM-TAHITI
    Homme Profil pro
    Directeur Service informatique et projet développement
    Inscrit en
    Janvier 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Directeur Service informatique et projet développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 994
    Par défaut jours ouvrés
    Hello,
    Puisque tu as le nmbre de jours entre les deux dates, tu divises le résultat par 7 et tu prends la partie entière du résultat. Tu aura donc le nombre de partie de 7 jours, si tu ne veux que les dimanches, tu retranches le nombre d'entier de semaine, si tu veux les samedis en plus, tu prends la partie entière et tu la multiplie par deux, etc....
    Toutefois, tu n'auras pas les jours fériés qui doivent être inscrit dans une table (surtout si si c'est pas des samedi et dimande)
    Je reconnais que je suis restrictif sur la réponse mais l'amorce est là
    Amicalement

  5. #5
    Membre éprouvé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 336
    Par défaut
    Bonjour à tous,

    Déjà merci beaucoup pour vos réponses. Je ne sais pas encore vers quoi je vais m'orienter, DateversJour() me semble le plus simple, mais peut être que la solution d'une table avec les jours non ouvrés serait plus intéressante à long terme.

    Merci encore.

    A+

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Par défaut
    Il te faut les deux si tu veux inclure les jours fériés (ce qui semble indispensable pour toi)
    • La fonction pour les jours de la semaine (tu ne peux pas stocker tous les jours de toutes les années et de toute façon c'est inutile)
    • Une table pour les jours fériés

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Par défaut
    Bonjour,

    Tout dépend de ce que l'on veut faire...

    L'utilisation d'une table peut sembler étrange ou lourde, mais c'est (il me semble) la seule technique efficace pour de la GPAO ou de la GMAO.

    Citation Envoyé par lolob84 Voir le message
    Malheureusement, je ne vois pas comment tu pourrais faire ça sans passer par une table qui te donne les jours ouvrés existants entre tes deux dates...
    J'avais développé une appli il y a longtemps qui faisait ça pour de la GMAO. On avait une table qui contenait uniquement les jours non ouvrés (une date sous forme de clé par exemple) et je faisais un count sur cette table avec comme condition la date de début et la date de fin. le count te renvoie donc le nbre de jours non ouvrés. il ne te reste qu'à faire la différence avec ton datedifference pour avoir le nbre de jours ouvrés.
    C'est tellement pratique pour établir un planning prévisionnel, calculer une charge de travail, calculer intensivement des écarts de dates, etc.

    _

  8. #8
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2002
    Messages : 899
    Par défaut
    Moi je crois que je ferais une simple boucle, avec un test pour chaque jour (fonction JourFérié()?)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    PRODECUDE nNbJoursFerie(dDateDebut, dDateFin)
    DateTest est une Date = dDateDebut
    nNbJours est un entier
    BOUCLE
        SI PAS JourFerie(dDateTest) _ET_ PAS DateVersJour(dDateTest) _DANS_ (6,7) ALORS nNbJours++
        dDateTest..Jour++
    A FAIRE TANTQUE dDateTest < DateFin
    RENVOYER nNbJours
    à vérifier, parce que pas testé , et surtout pas propre du tout.

  9. #9
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    Faites attention, la fonction JourFérié ne fait que tester si un jour est férié par rapport à des données préalablement initialisées (JourFériéAjoute).

    Pour simplifier, ces fonctions ne font que manipuler un tableau assocatif global .

    D'autre part, cela ne règle pas du tout la problématique de définition des jours fériés. Quelquesoit votre méthode pour savoir si un jour est férié, vous devez obligatoirement tenir une liste de ces jours que ce soit en dur ou dans les données de l'application.


    Enfin, personnellement, je penche pour l'utilisation systématique de tables "calendrier" qui facilitent le travail sur les données temporelles comme ça a déjà été dit.

  10. #10
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2002
    Messages : 899
    Par défaut
    Je n'ai jamais utilisé cette fonction, et je me suis fait avoir.
    Je pensais en effet que la liste était pré-chargée par les jours fériés du pays.

    Bref, l'utilisation m'en parait pourtant intéressante car elle permet d'avoir une visualisation de ces jours sur un champ Calendrier, quitte à faire l'ajout manuellement au démarrage de l'application.

  11. #11
    Membre émérite
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2017
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2017
    Messages : 338
    Par défaut
    Si quelqu'un repasse par là, j'ai fait ça, ouvert aux avis. Je l'ai testé avec des sites donnant les jours ouvrés (je ne parle bien que des jours ouvrés, j'ai pas eu besoin de paramétriser les fonctions pour gérer les jours ouvrables)
    Je m'inspire de la toute première fonction donnée par Bowen

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    PROCÉDURE GLOBALE EstJourOuvre(dDate est Date)
     
    bEstJourOuvre est un booléen
    SI PAS DateVersJour(dDate) _DANS_ (6,7) _ET_ PAS JourFérié(dDate) ALORS bEstJourOuvre=Vrai
    RENVOYER bEstJourOuvre
    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
    PROCÉDURE GLOBALE NombreJoursOuvresEntreDeuxDates(dDateDebut est Date, dDateFin est Date)
     
    //Les bornes sont incluses car si on veut les jours ouvrés entre le 1er et le 31, le 1er et le 31 ca compte aussi si ce sont des jours non-weekend et non-fériés
    //Les samedi dimanche et jours fériés sont exclus
     
    dDebut	est une Date	= dDateDebut
    nNbJoursOuvres	est un entier
     
    SI dDateDebut = dDateFin ALORS
    	SI EstJourOuvre(dDateDebut) ALORS nNbJoursOuvres++
    SINON
    	BOUCLE
    		SI PAS DateVersJour(dDebut) _DANS_ (6,7) _ET_ PAS JourFérié(dDebut) ALORS nNbJoursOuvres++
    		dDebut..Jour++
    	À FAIRE TANTQUE dDebut <= dDateFin
    FIN
     
    RENVOYER nNbJoursOuvres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PROCÉDURE GLOBALE NombreJoursOuvresDansMois(numeroMois est entier, annee est entier)
     
    dDate est Date = NumériqueVersChaîne(annee) + Droite("00"+NumériqueVersChaîne(numeroMois),2) + "01"
    RENVOYER NombreJoursOuvresEntreDeuxDates(PremierJourDuMois(dDate),DernierJourDuMois(dDate))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    PROCÉDURE GLOBALE NombreJoursOuvresDansAnnee(annee est entier)
     
    nbJoursOuvres est entier
     
    POUR i = 1 _À_ 12
    	dDate est Date = NumériqueVersChaîne(annee) + Droite("00"+NumériqueVersChaîne(i),2) + "01"
    	nbJoursOuvres += NombreJoursOuvresEntreDeuxDates(PremierJourDuMois(dDate),DernierJourDuMois(dDate))
    FIN
     
    RENVOYER nbJoursOuvres
    Bien sur l'utilisation de JourFerie() implique l'appel de cette fonction en début de projet:
    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
    PROCÉDURE GLOBALE JourFerieGere()
     
    JourFériéSupprimeTout()
    // Initialisation des 11 jours fériés communs aux départements français et DOM/TOM
    JourFériéAjoute("0101") // 1er Janvier
    JourFériéAjoute(jfLundiDePâques) // Lundi de Pâques
    JourFériéAjoute("0501") // 1er Mai
    JourFériéAjoute("0508") // 8 Mai
    JourFériéAjoute(jfJeudiDeLAscension) // Jeudi de l'Ascension
    JourFériéAjoute(jfLundiDePentecôte) // Lundi de Pentecôte
    JourFériéAjoute("0714") // 14 Juillet
    JourFériéAjoute("0815") // 15 Août (Assomption)
    JourFériéAjoute("1101") // Toussaint
    JourFériéAjoute("1111") // 11 Novembre
    JourFériéAjoute("1225") // Noël

  12. #12
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 933
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    En France, les jours ouvrés doivent se traiter au cas par cas selon les conventions collectives.
    Concernant les jours fériés, d'après le code du travail, seul le 1° Mai est chômé.
    Exception
    -Alsace Moselle 26 décembre et Vendredi Saint (article L. 3134-16 du code du travail) en pinaillant, on pourrait ajouter, concernant le Vendredi Saint, qu'il faut qu'il y ait un temple protestant ou une église mixte dans la ville de l'entreprise
    Pour les départements et territoires suivants, l'article L. 3422-2 du code du travail prévoit que les jours suivants sont chômés
    Le 27 avril à Mayotte ;
    Le 22 mai en Martinique ;
    Le 27 mai en Guadeloupe et à Saint-Martin ;
    Le 10 juin en Guyane ;
    Le 9 octobre à Saint-Barthélemy ;
    Le 20 décembre à La Réunion.

    Il en va de même por le samedi et le dimanche. La loi prévoit un repos hebdomadaire d’une durée minimale de 24 heures consécutives et 11 heures de repos quotidien.

  13. #13
    Membre émérite
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2017
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2017
    Messages : 338
    Par défaut
    Merci @Voroltinquo
    Précision donc, ceci correspondait au besoin d'un de mes clients. La fonction JourFerieGere() est à adapter mais la fonction EstJourOuvre() aussi du coup, pour tenir compte des spécificités indiquées.

  14. #14
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 518
    Par défaut
    Bonjour,

    Pour dé-pinailler. En Alsace-Moselle, tout le monde prend le 26 décembre + vendredi saint. Personne ne regarde s'il y a un temple protestant dans les parages.

  15. #15
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 933
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par frenchsting Voir le message
    Bonjour,

    Pour dé-pinailler. En Alsace-Moselle, tout le monde prend le 26 décembre + vendredi saint. Personne ne regarde s'il y a un temple protestant dans les parages.
    De même que le jour de la braderie de Lille de nombreuses administrations sont fermées.
    Toutefois cela n'empêche pas d'avoir ce genre de rappels .
    Donc, le cas par cas (on était sur une note du bâtiment donc le KParK) est de rigueur.
    ... et je ne parle pas des ponts qui eux non plus ne sont pas automatiques, ni du jour de solidarité qui peut varier si l'employé concerné est intérimaire ou pas

Discussions similaires

  1. [Dates] Calcul du nombre de jours ouvrés entre 2 dates
    Par Pokerstar dans le forum Langage
    Réponses: 6
    Dernier message: 16/07/2011, 16h02
  2. Nombre de jours ouvrés entre deux dates
    Par johnson95 dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 17/06/2009, 22h12
  3. [Dates] Nombre de jours ouvrés entre deux date
    Par meufeu dans le forum Langage
    Réponses: 1
    Dernier message: 31/01/2007, 17h50
  4. Réponses: 1
    Dernier message: 10/08/2006, 14h43
  5. Nombre de jours ouvrés entre 2 dates
    Par motlerang dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/12/2005, 13h25

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