Bonjour à tous !
Voila à partir de d'un code que j'ai pu trouver sur le net et d'un autre code en javascript que j'ai essayé de faire j'aurais voulu mettre en place un petit script ou lorsque je rentre deux dates j'aurais le nombres de jours ouvrés en tenant compte des jours fériés et des week-end !

J'ai en effet un premier script en PHP qui me donne bien le nombre de jours ouvrés en tenant compte des jours fériés et week end
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
 
<?php
// Fonction permettant de compter le nombre de jours ouvrés entre deux dates
    function get_nb_open_days($date_start, $date_stop) {
    $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_stop) - date('Y', $date_start);
    for ($i = 0; $i <= $diff_year; $i++) {
    $year = (int)date('Y', $date_start) + $i;
    // Liste des jours feriés
    $arr_bank_holidays[] = '1_1_'.$year; // Jour de l'an
    $arr_bank_holidays[] = '1_5_'.$year; // Fete du travail
    $arr_bank_holidays[] = '8_5_'.$year; // Victoire 1945
    $arr_bank_holidays[] = '14_7_'.$year; // Fete nationale
    $arr_bank_holidays[] = '15_8_'.$year; // Assomption
    $arr_bank_holidays[] = '1_11_'.$year; // Toussaint
    $arr_bank_holidays[] = '11_11_'.$year; // Armistice 1918
    $arr_bank_holidays[] = '25_12_'.$year; // Noel
 
    // Récupération de paques. Permet ensuite d'obtenir le jour de l'ascension et celui de la pentecote
    $easter = easter_date($year);
    $arr_bank_holidays[] = date('j_n_'.$year, $easter + 86400); // Paques
    $arr_bank_holidays[] = date('j_n_'.$year, $easter + (86400*39)); // Ascension
    $arr_bank_holidays[] = date('j_n_'.$year, $easter + (86400*50)); // Pentecote
    }
    //print_r($arr_bank_holidays);
    $nb_days_open = 0;
    while ($date_start < $date_stop) {
    // 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_start), array(0, 6))
    && !in_array(date('j_n_'.date('Y', $date_start), $date_start), $arr_bank_holidays)) {
    $nb_days_open++;
     }
     $date_start += 86400;
     }
    return $nb_days_open;
    }
 
    // Exemple : Du 11 au 15 juillet il n'y a qu'un jour ouvré (week-end + 1 jours férié)
     $date_depart = strtotime('2009-03-20');
     $date_fin = strtotime('2009-03-23');
     $nb_jours_ouvres = get_nb_open_days($date_depart, $date_fin);
    echo 'Il y a '.$nb_jours_ouvres.' jours ouvr&eacute;s entre le '.date('d/m/Y', $date_depart).' et le '.date('d/m/Y', $date_fin);
?>
et donc mon deuxième script en javascript qui est sous la forme d'un formulaire me permet de mettre deux dates et davoir dans un textarea le résultat voulu mais ce code ne prend pas en compte ni les jours fériés et week-end

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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
 
<html>
<head>
<script language="javascript">
function strtotime(str, now) {
 
    var i, match, s, strTmp = '', parse = '';
 
    strTmp = str;
    strTmp = strTmp.replace(/\s{2,}|^\s|\s$/g, ' '); // unecessary spaces
    strTmp = strTmp.replace(/[\t\r\n]/g, ''); // unecessary chars
 
    if (strTmp == 'now') {
        return (new Date()).getTime()/1000; // Return seconds, not milli-seconds
    } else if (!isNaN(parse = Date.parse(strTmp))) {
        return (parse/1000);
    } else if (now) {
        now = new Date(now*1000); // Accept PHP-style seconds
    } else {
        now = new Date();
    }
 
    strTmp = strTmp.toLowerCase();
 
    var process = function (m) {
        var ago = (m[2] && m[2] == 'ago');
        var num = (num = m[0] == 'last' ? -1 : 1) * (ago ? -1 : 1);
 
        switch (m[0]) {
            case 'last':
            case 'next':
                switch (m[1].substring(0, 3)) {
                    case 'yea':
                        now.setFullYear(now.getFullYear() + num);
                        break;
                    case 'mon':
                        now.setMonth(now.getMonth() + num);
                        break;
                    case 'wee':
                        now.setDate(now.getDate() + (num * 7));
                        break;
                    case 'day':
                        now.setDate(now.getDate() + num);
                        break;
                    case 'hou':
                        now.setHours(now.getHours() + num);
                        break;
                    case 'min':
                        now.setMinutes(now.getMinutes() + num);
                        break;
                    case 'sec':
                        now.setSeconds(now.getSeconds() + num);
                        break;
                    default:
                        var day;
                        if (typeof (day = __is.day[m[1].substring(0, 3)]) != 'undefined') {
                            var diff = day - now.getDay();
                            if (diff == 0) {
                                diff = 7 * num;
                            } else if (diff > 0) {
                                if (m[0] == 'last') diff -= 7;
                            } else {
                                if (m[0] == 'next') diff += 7;
                            }
                            now.setDate(now.getDate() + diff);
                        }
                }
                break;
 
            default:
                if (/\d+/.test(m[0])) {
                    num *= parseInt(m[0]);
 
                    switch (m[1].substring(0, 3)) {
                        case 'yea':
                            now.setFullYear(now.getFullYear() + num);
                            break;
                        case 'mon':
                            now.setMonth(now.getMonth() + num);
                            break;
                        case 'wee':
                            now.setDate(now.getDate() + (num * 7));
                            break;
                        case 'day':
                            now.setDate(now.getDate() + num);
                            break;
                        case 'hou':
                            now.setHours(now.getHours() + num);
                            break;
                        case 'min':
                            now.setMinutes(now.getMinutes() + num);
                            break;
                        case 'sec':
                            now.setSeconds(now.getSeconds() + num);
                            break;
                    }
                } else {
                    return false;
                }
                break;
        }
        return true;
    };
 
    var __is =
    {
        day:
        {
            'sun': 0,
            'mon': 1,
            'tue': 2,
            'wed': 3,
            'thu': 4,
            'fri': 5,
            'sat': 6
        },
        mon:
        {
            'jan': 0,
            'feb': 1,
            'mar': 2,
            'apr': 3,
            'may': 4,
            'jun': 5,
            'jul': 6,
            'aug': 7,
            'sep': 8,
            'oct': 9,
            'nov': 10,
            'dec': 11
        }
    };
 
    match = strTmp.match(/^(\d{2,4}-\d{2}-\d{2})(?:\s(\d{1,2}:\d{2}(:\d{2})?)?(?:\.(\d+))?)?$/);
    if (match != null) {
        if (!match[2]) {
            match[2] = '00:00:00';
        } else if (!match[3]) {
            match[2] += ':00';
        }
 
        s = match[1].split(/-/g);
 
        for (i in __is.mon) {
            if (__is.mon[i] == s[1] - 1) {
                s[1] = i;
            }
        }
        s[0] = parseInt(s[0], 10);
 
        s[0] = (s[0] >= 0 && s[0] <= 69) ? '20'+(s[0] < 10 ? '0'+s[0] : s[0]+'') : (s[0] >= 70 && s[0] <= 99) ? '19'+s[0] : s[0]+'';
        return parseInt(this.strtotime(s[2] + ' ' + s[1] + ' ' + s[0] + ' ' + match[2])+(match[4] ? match[4]/1000 : ''), 10);
    }
 
    var regex = '([+-]?\\d+\\s'
    + '(years?|months?|weeks?|days?|hours?|min|minutes?|sec|seconds?'
    + '|sun\.?|sunday|mon\.?|monday|tue\.?|tuesday|wed\.?|wednesday'
    + '|thu\.?|thursday|fri\.?|friday|sat\.?|saturday)'
    + '|(last|next)\\s'
    + '(years?|months?|weeks?|days?|hours?|min|minutes?|sec|seconds?'
    + '|sun\.?|sunday|mon\.?|monday|tue\.?|tuesday|wed\.?|wednesday'
    + '|thu\.?|thursday|fri\.?|friday|sat\.?|saturday))'
    + '(\\sago)?';
 
    match = strTmp.match(new RegExp(regex, 'g'));
    if (match == null) {
        return false;
    }
 
    for (i in match) {
        if (!process(match[i].split(' '))) {
            return false;
        }
    }
 
    return (now.getTime()/1000);
}
 
function calcul(total,d1,d2)
{ // on se limite à un prix avec un taux de TVA et des frais de port
x=document.getElementById(d1);d1=x.value; // DATE 1
x=document.getElementById(d2);d2=x.value; // DATE 2
 
r=Math.round((strtotime(d2) - strtotime(d1))/(60*60*24)-1)+1; // On calcule
x=document.getElementById(total);x.value=r; // On affecte
}
</script>
</head>
<body>
<form name="frm">
DATE 1 : <input type="text" name="d1" id="d1" onBlur="calcul('total','d1','d2')" value="0"><br/>
DATE 2 : <input type="text" name="d2" id="d2" onBlur="calcul('total','d1','d2')" value="0"><br/>
<br/>
Total  : <input id="total" type="text" name="total" readonly="true">
</form>
</body>
</html>
Donc en gros le but sera de pouvoir fusionner ces deux codes pour obtenir un petit script javascript ! Quelqu'un pour m'aider ???