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

  FORUM HardWare.fr
  Programmation
  PHP

  calcul du nombre de jours ouvrés entre 2 dates

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

calcul du nombre de jours ouvrés entre 2 dates

n°677372
pizzafmann
Posté le 18-03-2004 à 17:36:52  profilanswer
 

Bonjour,
 
Existe-t-il (ou qqn a-t-il déjà écrit) une fonction qui retourne le nombre de jours ouvrés entre 2 dates passés en paramètre?
 
Exemple: nb_jours_ouvrés(2004-03-12, 2004-03-18) renvoie 5
 
Merci beaucoup!
 
Al

mood
Publicité
Posté le 18-03-2004 à 17:36:52  profilanswer
 

n°677385
Mara's dad
Yes I can !
Posté le 18-03-2004 à 17:57:19  profilanswer
 

Je n'en connais pas de toute faite...
 
La seule réelle difficultée, c'est les jours fériers 'mobiles'.
 
Mais pour çà, j'ai la solution :
 
http://www.surleau.com/hfr/paques.php


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°677404
pizzafmann
Posté le 18-03-2004 à 18:20:14  profilanswer
 

Peut-être que les difficultés ne sont pas "réelles", mais, étant débutante dans la programmation, je n'arrive pas à les surmonter ;-)

n°677408
pizzafmann
Posté le 18-03-2004 à 18:24:15  profilanswer
 

J'avais pas trouvé les smileys, je recommence donc :  
Pourais-tu m'aider un peu plus s'il te plait?  :??:

n°677423
Mara's dad
Yes I can !
Posté le 18-03-2004 à 18:41:25  profilanswer
 

Arf, je vais voir ce que je peux faire, mais compte pas trop avoir du code tout fait. Faut bosse un peu quand même, et c'est pas le genre du forum (des fois je le fais et ensuite on me dis que c'est pas bien...) :D
 
D'abord, qu'est-ce que tu vois comme algo pour ton calcul ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°677469
mrbebert
Posté le 18-03-2004 à 19:35:05  profilanswer
 

Pour les algos, ca devrait pouvoir s'arranger [:figti]  
Mais ces dates, elles viennent d'où ? D'une base de données ?


Message édité par mrbebert le 18-03-2004 à 19:53:05
n°677641
T509
$job->GetJob(now)
Posté le 18-03-2004 à 23:40:50  profilanswer
 
n°677755
pizzafmann
Posté le 19-03-2004 à 09:39:31  profilanswer
 

C'est bien ce qui m'embête: je n'ai pas la moindre idée de comment orienter mon algo, à part faire du "cas par cas".
Récupérer le jour (lundi...) des 2 dates d1 et d2
- si les 2 dates sont en semaine, faire: durée=d2-d1+1, division entière par 7 pour trouver le nombre de semaine et donc le nb de jours à enlever à durée --> jours_semaine
- si d1 samedi ou dimanche, se ramener au lundi et faire comme ci-dessus.
- si d2 samedi ou dimanche, se ramener au vendredi et faire comme ci-dessus.
 
D'autre part, calculer les jours fériés mobiles pour l'année considérée. Pour chacun de ces jours et des jours fériés fixes, tester s'ils sont dans l'intervalle d1-d2 et enlever le nb de jours nécéssaires.
 
Bref, ça m'a l'air vraiment très bourrin, je pense qu'il doit y avoir une solution plus "jolie".
 
Pour répondre à la question (et je m'arrêterai là, vu la longueur du message!), une des dates vient d'une base de donnée, l'autre est la date du jour.
 
Merci pour votre aide!  :)  
 
Al

n°677996
Mara's dad
Yes I can !
Posté le 19-03-2004 à 12:20:36  profilanswer
 

Ben il à l'air pas mal ton algo !
 
Sauf :
Vérifier pour les jours férier fixes qu'il ne tombent pas un samedi ou un dimanche que tu as déjà décompté.
 
Si tu veux faire une fonction vraiement générique fait attention à une chose, l'intervalle peut s'étaler sur plusieurs années...
 
Une implémentation possible serait de faire une fonction pour un interval sur une année. Une autre fonction plus générale découpe l'intervalle fournis par année et appelle la première fonction.
 
Amuse toi bien :D
 
PS : Y'a un jour férier qui va sauter un de ces 4...
Infos : http://perso.wanadoo.fr/milisoft/stuff/
Pour le moment, c'est à partir de 2005 que théoriquement le lundi de Pentecôte doit sauter.
http://perso.wanadoo.fr/milisoft/s [...] echos.html
Mais rien n'est encore définitif...
Je sens que çà va pas simplifier l'algo çà :D


Message édité par Mara's dad le 19-03-2004 à 12:28:29

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°678332
pizzafmann
Posté le 19-03-2004 à 18:02:09  profilanswer
 

Non, ça c'est rien par rapport à ce que je ne vous ai pas dit! J'ai posé ma question pour avoir un début de piste, mais j'ai une autre contrainte dont je ne vous ai pas parlé.
 
En fait, je travaille sur l'évolution d'un outil de déclaration de bugs (Mantis pour ceux qui connaissent). On a un délai $delai (connu, entendu avec le client, en jours ouvrés) à respecter pour corriger les bugs.  
Je veux faire un script que je lancerai toutes les nuits et qui calcule le nombre de jours ouvrés entre la date actuelle et celle de déclaration du bug (provenant d'une table), et le compare à $délai. Cela dans le but d'envoyer un mail au manager si le délai est dépassé.
Rajoutez à cela qu'on ne compte pas forcément en jours entiers mais par tranche de 0.25j: c'est un vrai casse-tête !
 
Après y avoir réfléchi une bonne partie de l'après-midi, je me demande si c'est vraiment faisable.
 
Ex : bug déclaré samedi à 10h (on sait jamais, que les clients travaillent le WE!). Script lancé lundi à 22h. Il faut que cela revienne à ce que le bug ait été déclaré le lundi matin et qu'il y ait donc eu 1j d'écoulé.
 
Autre ex : bug déclaré lundi à 16h. Script exécuté lundi à 22h.
Il faut tenir compte des horaires (officiels) de travail. Disons qu'une journée fait 8h et qu'on travaille jusqu'à 18h. Il faut que le script me renvoit donc qu'il y a eu 0.25j d'écoulé.
 
Si qqn a réussi à comprendre ce que doit faire mon script et a une idée d'un algo, n'hésitez pas !!!
J'ai essayé plusieurs pistes, mais je n'arrive pas à qqch de correct! J'avoue que je désespère un peu et je me demande si ce que je veux est réalisable.  :??:  
 
Merci encore!  :)  
 
A+  :hello:  
 
Al

mood
Publicité
Posté le 19-03-2004 à 18:02:09  profilanswer
 

n°678530
Mara's dad
Yes I can !
Posté le 19-03-2004 à 23:37:59  profilanswer
 

Désolé, mais je ne vois pas vraiement de difficulté :??:
 
Toutes les données sont connus, toutes les grandeurs sont calculables, donc y'a juste à pondre le code.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°678571
Mara's dad
Yes I can !
Posté le 20-03-2004 à 02:22:36  profilanswer
 

Allez, juste pour le plaisir :
 
http://www.surleau.com/date/date.php
 
Y'a pas les contraintes d'horaires, m'enfin c'est une bonne base je pense.
 
Remarques:
 
1- Je ne garanti rien du tout :D
2- Ca utilise une classe 'oDate' que j'utilise par ailleurs.
3- C'est pas optimisé du tout :ange:


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°678604
Mr yvele
yvele n'est plus.
Posté le 20-03-2004 à 10:49:25  profilanswer
 

j'arrive un peu en retard, mais moi j'ai fait ça :
 
 

Code :
  1. function dateCheckFree($date)
  2. {
  3. // Dimanche(0) ou Samedi(6)
  4. if(date('w',$date)==0||date('w',$date)==6)
  5. {
  6.  return 1;
  7. }
  8. $jour = date('d',$date);
  9. $mois = date('m',$date);
  10. $annee = date('Y',$date);
  11. if($jour == 1 && $mois == 1) return 1; // 1er janvier
  12. if($jour == 1 && $mois == 5) return 1; // 1er mai
  13. if($jour == 8 && $mois == 5) return 1; // 5 mai
  14. if($jour == 14 && $mois == 7) return 1; // 14 juillet
  15. if($jour == 15 && $mois == 8) return 1; // 15 aout
  16. if($jour == 1 && $mois == 11) return 1; // 1er novembre
  17. if($jour == 11 && $mois == 11) return 1; // 11 novembre
  18. if($jour == 25 && $mois == 12) return 1; // 25 décembre
  19. // Pâques
  20. $date_paques = @easter_date($annee);
  21. $jour_paques = date('d',$date_paques);
  22. $mois_paques = date('m',$date_paques);
  23. if($jour_paques == $jour && $mois_paques == $mois)
  24. {
  25.  return 1;
  26. }
  27. // Ascension
  28. $date_ascension = dateAddDay($date_paques,39);
  29. if(date('d',$date_ascension) == $jour && date('m',$date_ascension) == $mois)
  30. {
  31.  return 1;
  32. }
  33. // Pentecote
  34. $date_pentecote = dateAddDay($date_paques,50);
  35. if(date('d',$date_pentecote) == $jour && date('m',$date_pentecote) == $mois)
  36. {
  37.  return 1;
  38. }
  39. return 0;
  40. };


 
 :sol:

n°678605
Mr yvele
yvele n'est plus.
Posté le 20-03-2004 à 10:50:35  profilanswer
 

c'était pour mon planning en php..

n°678609
Mara's dad
Yes I can !
Posté le 20-03-2004 à 11:01:31  profilanswer
 

Et @easter_date() ca sort d'où ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°678610
Mr yvele
yvele n'est plus.
Posté le 20-03-2004 à 11:04:26  profilanswer
 
n°678618
Mara's dad
Yes I can !
Posté le 20-03-2004 à 11:14:25  profilanswer
 

Incroyable !
 
J'avais jamais vu les fonctions de calendrier :ouch:
 
Pourtant la doc PHP, j'ai passé du temps dessus :D


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°678623
Mr yvele
yvele n'est plus.
Posté le 20-03-2004 à 11:16:27  profilanswer
 

ben oui c'est magique.. pas besoin de calculer sois meme la date de paque avec un algo de ouf..  :D

n°678625
Mara's dad
Yes I can !
Posté le 20-03-2004 à 11:21:40  profilanswer
 

Yes !
 
Je crois que je vais refaire ma classe oDate !
 
Y'a plein de truc que je calcule moi-même pour rien dedans  :whistle:
 
Edit : Bon, mais ca va pas être pour tout de suite : j'ai piscine !
 
A+, et merci pour l'info :jap:


Message édité par Mara's dad le 20-03-2004 à 11:23:21

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°679849
pizzafmann
Posté le 22-03-2004 à 11:54:03  profilanswer
 

Merci à tous pour vos réponses!
J'ai planché dessus ce WE et j'ai finalement réussi avec vos indications. C'était finalement plus impressionnant (pour moi) que difficile! Mon code ressemble à peu près à celui proposé par Mr yvele donc je dois pas être loin de qqch de correct  :D En tout cas, ça a l'air de marcher: cool  :sol:  
 
Encore merci pour votre aide
 
Al


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  calcul du nombre de jours ouvrés entre 2 dates

 

Sujets relatifs
saisie d'un nombre[PHP Mysql] probleme pour avoir la difference entre 2 dates.
Perl a des bon jours devant lui ?nombre de jours ouvrables
Format d'un nombre (Décimales)[VB.NET] Incrémentation par nombre de saisie
nombre aléatoireCalcul de hash SHA-1
nombre d'enregistrements dans un sous formulaire 
Plus de sujets relatifs à : calcul du nombre de jours ouvrés entre 2 dates


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