JOURS OUVRES

cs_Silverlink
Messages postés
9
Date d'inscription
dimanche 7 septembre 2003
Statut
Membre
Dernière intervention
21 juillet 2006
- 21 juil. 2006 à 12:02
valougraou
Messages postés
1
Date d'inscription
jeudi 20 janvier 2011
Statut
Membre
Dernière intervention
20 janvier 2011
- 20 janv. 2011 à 18:49
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/38705-jours-ouvres

valougraou
Messages postés
1
Date d'inscription
jeudi 20 janvier 2011
Statut
Membre
Dernière intervention
20 janvier 2011

20 janv. 2011 à 18:49
Bonjour,
Ce sujet est assez ancien, mais je tenais juste à signaler qu'on parle ici de jours ouvrés (considérant le samedi et le dimanche comme jours non travaillés) et non ouvrables.
La définition d'un jour ouvrable est la suivante :
On considère comme ouvrables les jours consacrés au travail, c'est-à-dire tous les jours du calendrier à l'exception des jours correspondant au repos hebdomadaire légal et des jours fériés. En général on considère comme ouvrables les jours du lundi au samedi inclus.
Salutations,
VG
stardust_muss
Messages postés
3
Date d'inscription
lundi 28 mars 2005
Statut
Membre
Dernière intervention
18 février 2010

18 févr. 2010 à 10:33
à ce jour je n'ai pas réussi à faire marcher le code tel qu'il est fourni.

Voici la version modifié qui fonctionne pour moi

function getNextOpenDay ($iDate, $iDays) {
$aBankHolidays = array (
'1_1',
'1_5',
'8_5',
'14_7',
'15_8',
'1_11',
'11_11',
'25_12'
);

$iEaster = easter_date (date('Y',$iDate));

$aBankHolidays[] = date ('j_n',$iEaster);
$aBankHolidays[] = date ('j_n', $iEaster + (86400*39));
$aBankHolidays[] = date ('j_n', $iEaster + (86400*49));

// stamp théorique de fin
$iEnd = $iDays * 86400;
$i = 0;
while ($i < $iEnd) {
if (in_array(date('w', $iDate+$i),array(0,6)) || in_array(date('j_n', $iDate+$i),$aBankHolidays)) {
$iEnd = strtotime ('+1 day', $iEnd);
}
$i+= 86400;
}

//Stamp de fin date initial + le nombre de décalage
$stampFin = $iDate + $iEnd;
return ($iDate+$iEnd);
}
$iDate = strtotime ('2009-12-24');
$iDays = getNextOpenDay ($iDate, 2);
echo date("d/m/Y",$iDays);

Note : Dans un scénario de congé par exemple
Pour un congé pris le 24 décembre , la fonction retournera 29 décembre (25 férié , 26 27 = samedi et dimanche)
L'employé reviendra bien le 29 mais ses congés prennent fin le 28. Ainsi si on voulait afficher la date de fin de congé on afficherai la date retournée par la fonction - 1 jour.

Cordialement.
Astemius
Messages postés
10
Date d'inscription
mercredi 24 mai 2006
Statut
Membre
Dernière intervention
22 mars 2010

25 juil. 2008 à 17:16
En fait, la fonction easter_date() ne prend qu'un seul paramètre : l'année.

Voila le easter_date de ton code:
easter_date((int)date('Y'), $iDate)
Si tu suis bien les parenthèses, il y a actuellement l'année et la date que l'on entre en paramètre de la fonction.
Ca ne retourne pas d'erreur (étonnant d'ailleurs), mais ça ne fonctionne pas réellement pour autant. je m'en suis rendu compte en faisant des tests et en constant que cette fonction écrite tel quel me retournait toujours la même date pour pâques, peu importait l'année.

Donc en gros il faut écrire :
easter_date((int)date('Y', $iDate))

Voila, c'est subtile m'enfin.
See you space cowboy...

PS : Franchement, magnifique, après m'être penché un peu dans le code j'ai voulu tenté une chose : les heures ouvrées. Enfin j'en ai besoin pour l'appli en cours, et en gros en mettant 3/24 pour 3h par exemple, et bien ça fonctionne... bref, j'adore (non franchement, si tu savais à quel point j'en chie... j'ai envie de pleurer de joie là ^^)
malalam
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Membre
Dernière intervention
2 mars 2010
25
24 juil. 2008 à 20:38
Hello,

merci pour le commentaire :-)
Je ne vois pas de quelle parenthèse mal placée tu parles, par contre ?

Quant à Pâques, j'avoue que je n'avais jamais vérifié...merci pour l'info, je corrigerai.
Astemius
Messages postés
10
Date d'inscription
mercredi 24 mai 2006
Statut
Membre
Dernière intervention
22 mars 2010

24 juil. 2008 à 16:55
Salutations,

j'adore ce genre de code mais, car il y a un mais, y a un soucis au niveau du calcul de pâques et de la pentecôte.
En fait, tu prends bien le jour même de pâques, idem pour la pentecôte. Le soucis est que les jours fériés ont lieu le lendemain, soit le lundi de pâques et le lundi de la pentecôte (l'algo tombe sur les dimanche).

J'ai aussi noté une erreur dans l'utilisation de la fonction easter_date (parenthèse mal placée... d'ailleurs je ne comprends pas pourquoi ça ne me renvoyait pas d'erreur avant). Voici donc le code modifié :

if (function_exists('easter_date')) {
$iEaster = easter_date ((int)date('Y', $iDate));
} else {
$iEaster = getEaster ((int)date('Y'), $iDate);
}
$aBankHolidays[] = date ('j_n',$iEaster + 86400);
$aBankHolidays[] = date ('j_n', $iEaster + (86400*39));
$aBankHolidays[] = date ('j_n', $iEaster + (86400*50));

Pour ma part, j'ai supprimé la fonction getEaster() du code car la fonction easter_date existait effectivement.

M'enfin, merci pour le code, c'est probablement le meilleur que j'ai trouvé. Très optimisé. J'adhère.
Afficher les 27 commentaires