Bonjour j'ai crée un formulaire qui retourne 1 mois et une fonction qui doit me donner le nombre de jours ouvré dans ce mois en prenant en compte les jours fériés.

Mon problème c est que ma fonction ne marche pas pour septembre avril et juin et je comprend vraiment pas pourquoi.

merci de votre aide.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <title></title>
  </head>
  <body>
    <form name="date" action="date2.php" method="POST" >
      <select name="mois">
        <option value="1">janvier</option>
        <option value="2">février</option>
        <option value="3">mars</option>
        <option value="4">avril</option>
        <option value="5">mai</option>
        <option value="6">juin</option>
        <option value="7">juillet</option>
        <option value="8">aout</option>
        <option value="9">septembre</option>
        <option value="10">octobre</option>
        <option value="11">novembre</option>
        <option value="12">décembre</option>
      </select>
      <br />
      <input type="submit" name="valider" value="valider" /><br />
    </form>
  </body>
</html>
 
<?php
 
/**
     * nb_open_days($date_depart, $date_fin);
     *
     * @param string $mois
     *
     *
     *
     * @return $nb_jours_ouvres du mois
     */
 
$mois=$_POST['mois'];
 
    function get_nb_open_days($date_depart, $date_fin) {
    $arr_bank_holidays = array(); // Tableau des jours feriés
 
    // On boucle dans le cas où l'année de départ serait différente de l'année d'arrivée
    $diff_year = date('Y', $date_fin) - date('Y', $date_depart);
    for ($i = 0; $i <= $diff_year; $i++) {
    $year = (int)date('Y', $date_depart) + $i;
    // Liste des jours feriés
    $arr_bank_holidays[] = '1_1_'.date('Y'); // Jour de l'an
    $arr_bank_holidays[] = '1_5_'.date('Y'); // Fete du travail
    $arr_bank_holidays[] = '8_5_'.date('Y'); // Victoire 1945
    $arr_bank_holidays[] = '14_7_'.date('Y'); // Fete nationale
    $arr_bank_holidays[] = '15_8_'.date('Y'); // Assomption
    $arr_bank_holidays[] = '1_11_'.date('Y'); // Toussaint
    $arr_bank_holidays[] = '11_11_'.date('Y'); // Armistice 1918
    $arr_bank_holidays[] = '25_12_'.date('Y'); // Noel
    $arr_bank_holidays[] = '5_06_'.date('Y'); // pp
 
    // Récupération de paques. Permet ensuite d'obtenir le jour de l'ascension et celui de la pentecote
    $easter = easter_date(date('Y'));
 
 
    $arr_bank_holidays[] = date('j_n_'.date('Y'), $easter + 86400); // Paques
    $arr_bank_holidays[] = date('j_n_'.date('Y'), $easter + (86400*39)); // Ascension
    // $arr_bank_holidays[] = date('j_n_'.date('Y'), $easter + (86400*49)); // Pentecote
 
    }
 
    $nb_days_open = 0;
    while ($date_depart < $date_fin) {
            // Si le jour suivant n'est ni un dimanche (0) ou un samedi (6), ni un jour férié, on incrémente les jours ouvrés
            if (!in_array(date('w', $date_depart), array(0, 6))
            && !in_array(date('j_n_'.date('Y', $date_depart), $date_depart), $arr_bank_holidays)) {
            $nb_days_open++;
        }
        $date_depart += 86400;
    }
 
     $nb_days_open++;
    return $nb_days_open;
    }
 
    $nb_jour_mois = cal_days_in_month(CAL_GREGORIAN, $mois, date('Y'));
 
 
     $date_depart = strtotime(strval (date('Y'))."-".strval ($mois)."-".strval (1));
     $date_fin = strtotime(strval (date('Y'))."-".strval ($mois)."-".strval ($nb_jour_mois));
     $nb_jours_ouvres = get_nb_open_days($date_depart, $date_fin);
 
    echo 'Il y a '.$nb_jours_ouvres.' jours ouvr&eacute;s entre le '.strval (date('Y'))."-".strval ($mois)."-".strval (1).' et le '.strval (date('Y'))."-".strval ($mois)."-".strval ($nb_jour_mois);
 
 
 
    echo '  nombre jour dans le mois : '.$nb_jour_mois;