Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1503 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Nb Jours entre 2 dates - Jours fériés

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Nb Jours entre 2 dates - Jours fériés

n°956425
getsou
Posté le 19-01-2005 à 14:40:05  profilanswer
 

Voilà mon problème, je dois récupérer le nombre de jours prestés par un travailleur entre 2 dates que je sélectionne dans ma Bd.
Le problème c'est que je reçois un champ de début de période de travail pour un projet et de fin de période.
Je dois donc enlever moi-même les samedis et dimanche  
(et éventuellement les jours fériés, ça on verra bien après).
Avant j'utilisais le TimeSpan ts= DateFin-DateDeb et j'avais donc le nombre de jours d'écart entre les 2 dates. Mais vu que je dois enlever les samedis et dimanche... Est-ce qu'il y a possibilité de faire cela facilement ou dois-je passer en revue tous les jours compris entre ces 2 dates et enlever un jour à chaque fois qu'on tombe sur un samedi ou dimanche? Ce qui risque d'être bien lourd à faire!!

mood
Publicité
Posté le 19-01-2005 à 14:40:05  profilanswer
 

n°957094
ToxicAveng​er
Posté le 20-01-2005 à 08:52:52  profilanswer
 

bah au pire une boucle avec 2 if et hop c'est fait, je vois pas ce qu'il y a de lourd la dedans...

n°957111
getsou
Posté le 20-01-2005 à 09:21:50  profilanswer
 

Ben si boucler sur tous les jours de date si j'ai un écart de 5 mois, je trouve moi... Je sais pas des fois qu'il y aurait possibilité de récupérer tous les samedis et dimanches par je ne sais quel moyen. Mais si jamais oui je ferai comme ça, pas le choix...

n°957136
Mara's dad
Yes I can !
Posté le 20-01-2005 à 09:46:37  profilanswer
 

Avec une BD, tu peut te faire un calendrier à mettre à jour de temps en temps...
Pour les jours fériés, y'a 2 cas:
- Les dates fixes : facile ;)
- Les fêtes mobiles : Basées sur la date de pâques : voir http://www.surleau.com/hfr/paques.php?A=2005 par exemple
 
Une fois que t'as ton calendrier en base, c'est facile de faire une requête pour compter le nombre de jours ouvrés entre deux dates.
 
Sans base, c'est pas très compliqué non plus:
Une fois que tu as le nombre de jours, il faut enlever :
- Les samedis et dimanches. Normalement y reviennent tous les 7 jours, donc si tu sais quel est le jour de début, en gros il suffit de compter le nombre de fois qu'il y as 7 jours, bref une division quoi ;)
- Les jours fériés (Fixes + calculés pour la période). Compter ceux qui sont dans la période mais qui ne tombent pas un week-end.
Attention au périodes sur plusieurs années...


Message édité par Mara's dad le 20-01-2005 à 09:48:28

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°957156
getsou
Posté le 20-01-2005 à 10:17:44  profilanswer
 

Je te remercie, avec tes explications ça devrait aller vite... Juste que c'est pas tout à fait une division car si on commence un projet un jour de semaine autre que le lundi, ce ne sera pas juste de diviser par 7... J'y avais pensé aussi. J'ai trouvé du code VB qui permet de calculer un écart de date de jours ouvrables aussi. Je vais d'avord voir ce que ça donne en le convertissant en c#.
En tout cas encore merci pour ton aide!!

n°957465
Mara's dad
Yes I can !
Posté le 20-01-2005 à 14:46:14  profilanswer
 

C'est sûr qu'il faut pas juste diviser par 7 !
 
Exemple ( je compte les jours de début et de fin )
Début : 20/01/2005
Fin : 16/02/2005
 
Donc :
Nombre de jour : 28
Début est un jeudi, donc 2 jour avant le week-end
=> ( 28 - 4 ) / 7 = 3 reste 3
 
On a donc : le week-end qui vient plus 3 autres week-ends.
 
Donc nombre de jours ouvrés : 28 - ( 1 + 3 ) * 2 = 20 !
 
Y'a plus qu'à écrire ça en C# ;)


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°957478
getsou
Posté le 20-01-2005 à 14:57:11  profilanswer
 

Grand merci, c'est bien sympa de ta part...

n°958228
ToxicAveng​er
Posté le 21-01-2005 à 09:09:05  profilanswer
 

oui c'est de l'algorithmie quoi, aucun rapport avec le C# [:spamafote]

n°958699
getsou
Posté le 21-01-2005 à 16:39:21  profilanswer
 

Oui mais bon c'est toujours sympa de répondre aux questions et de se préoccuper des problèmes des autres, même si c'est de l'algorithmie... Enfin soit!!

n°1951334
LogRaam
Posté le 17-12-2009 à 20:51:14  profilanswer
 

       public static int WorkingDays(DateTime FromDate, DateTime ToDate)
        {
            int nbrJours = Convert.ToInt32(ToDate - FromDate);
            int dayofweek = GetDayOfWeekPosition(ToDate);
            int reste = (nbrJours - dayofweek)/7;
            return nbrJours - (1 + reste)*2;
        }
 
        private static int GetDayOfWeekPosition(DateTime ToDate)
        {
            int result;
            switch (ToDate.DayOfWeek)
            {
                case DayOfWeek.Monday:
                    result = 5;
                    break;
                case DayOfWeek.Tuesday:
                    result = 4;
                    break;
                case DayOfWeek.Wednesday:
                    result = 3;
                    break;
                case DayOfWeek.Thursday:
                    result = 2;
                    break;
                case DayOfWeek.Friday:
                    result = 1;
                    break;
                default:
                    result = 0;
                    break;
            }
            return result;            
        }
 
Voilà, c'est une trad en C#...
 
Log.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Nb Jours entre 2 dates - Jours fériés

 

Sujets relatifs
[ACCESS] Calculs sur dates faisables qu'en aaaa/MM/jjEncore un pb de dates !!
dates avec une base oracleComparer des dates
jour par mois entre deux datesDébuter avec les dates et le temps [Tuto]
comparaison de datesRetrouver la date d'il y'a X jours
Séléctionner des infos entre 2 dates connuesprobleme avec les dates :
Plus de sujets relatifs à : Nb Jours entre 2 dates - Jours fériés


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR