calcul du nombre de jours ouvrés entre 2 dates - PHP - Programmation
Marsh Posté le 18-03-2004 à 17:57:19
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
Marsh Posté le 18-03-2004 à 18:20:14
Peut-être que les difficultés ne sont pas "réelles", mais, étant débutante dans la programmation, je n'arrive pas à les surmonter ;-)
Marsh Posté le 18-03-2004 à 18:24:15
J'avais pas trouvé les smileys, je recommence donc :
Pourais-tu m'aider un peu plus s'il te plait?
Marsh Posté le 18-03-2004 à 18:41:25
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'abord, qu'est-ce que tu vois comme algo pour ton calcul ?
Marsh Posté le 18-03-2004 à 19:35:05
Pour les algos, ca devrait pouvoir s'arranger
Mais ces dates, elles viennent d'où ? D'une base de données ?
Marsh Posté le 18-03-2004 à 23:40:50
Tout est expliqué ici :
http://www.phptools4u.com/articles/view.php?article=2
Marsh Posté le 19-03-2004 à 09:39:31
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
Marsh Posté le 19-03-2004 à 12:20:36
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
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 çà
Marsh Posté le 19-03-2004 à 18:02:09
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+
Al
Marsh Posté le 19-03-2004 à 23:37:59
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.
Marsh Posté le 20-03-2004 à 02:22:36
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
2- Ca utilise une classe 'oDate' que j'utilise par ailleurs.
3- C'est pas optimisé du tout
Marsh Posté le 20-03-2004 à 10:49:25
j'arrive un peu en retard, mais moi j'ai fait ça :
Code :
|
Marsh Posté le 20-03-2004 à 11:01:31
Et @easter_date() ca sort d'où ?
Marsh Posté le 20-03-2004 à 11:04:26
Mara's dad a écrit : Et @easter_date() ca sort d'où ? |
http://fr.php.net/manual/fr/function.easter-date.php
Marsh Posté le 20-03-2004 à 11:14:25
Incroyable !
J'avais jamais vu les fonctions de calendrier
Pourtant la doc PHP, j'ai passé du temps dessus
Marsh Posté le 20-03-2004 à 11:16:27
ben oui c'est magique.. pas besoin de calculer sois meme la date de paque avec un algo de ouf..
Marsh Posté le 20-03-2004 à 11:21:40
Yes !
Je crois que je vais refaire ma classe oDate !
Y'a plein de truc que je calcule moi-même pour rien dedans
Edit : Bon, mais ca va pas être pour tout de suite : j'ai piscine !
A+, et merci pour l'info
Marsh Posté le 22-03-2004 à 11:54:03
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 En tout cas, ça a l'air de marcher: cool
Encore merci pour votre aide
Al
Marsh Posté le 18-03-2004 à 17:36:52
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