par , 19/12/2017 à 21h39 (1684 Affichages)
Il est même possible de tenir compte des autres jours non fériés non travaillés comme les samedis et dimanches, il suffit pour cela d'indiquer les numéros des jours concernés avec pour règle Lundi = 1 et Dimanche = 7.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| function countFrenchBusinessDays(int $year, int $month, array $weekdays_off = [6, 7]): int
{
$holidays = [
1 => [1], // jour de l'an
5 => [1, 8], // fête du travail et armistice 39-45
7 => [14], // fête nationale
8 => [15], // Assomption
11 => [1, 11], // Toussaint et armistice 14-18
12 => [25] // noël
];
$easter_day = (new DateTime("{$year}-03-21"))->modify('+'.easter_days($year, CAL_GREGORIAN).' days');
$easter_month = $easter_day->format('n');
$holidays[$easter_month][] = $easter_day->format('j');
// no business days
if ( ! empty($weekdays_off)) {
$start = new DateTimeImmutable("{$year}-{$month}-01");
$end = $start->modify('first day of next month');
$days = new DatePeriod($start, new DateInterval('P1D'), $end);
foreach ($days as $dt) {
if (in_array($dt->format('N'), $weekdays_off)) {
$holidays[$month][] = $dt->format('j');
}
}
}
return $start->format('t') - count(array_unique($holidays[$month]));
} |