IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

fonction pour jours ouvré dans un mois


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    toulouse
    Inscrit en
    Mai 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : toulouse

    Informations forums :
    Inscription : Mai 2017
    Messages : 4
    Par défaut fonction pour jours ouvré dans un mois
    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;

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Définis "ne marche pas". Qu'attends-tu et qu'obtiens-tu ?
    Pour avril, ça peut être un problème avec ta fonction pour la date de Pâques.

    Pour débugguer, tu peux décomposer ta vérification et afficher la date, et quelle condition est validée à chaque fois. Quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        while ($date_depart < $date_fin) {
            echo date('j_n_Y', $date_depart).' : ';
            // 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))) {
                echo "week-end<br>";
            } elseif(in_array(date('j_n_' . date('Y', $date_depart) , $date_depart) , $arr_bank_holidays)) {
                echo "férié<br>";
            } else {
                echo "ouvré<br>";
                $nb_days_open++;
            }
            $date_depart+= 86400;
        }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Avril juin et septembre sont des mois de 30 jours sans jour férié. Coïncidence ? Je ne crois pas...

  4. #4
    Futur Membre du Club
    Homme Profil pro
    toulouse
    Inscrit en
    Mai 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : toulouse

    Informations forums :
    Inscription : Mai 2017
    Messages : 4
    Par défaut
    Citation Envoyé par Spartacusply Voir le message
    Avril juin et septembre sont des mois de 30 jours sans jour férié. Coïncidence ? Je ne crois pas...
    j ai vu le problème c est que je l ai retourné dans tout les sens et impossible de voir ou est l erreur

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Si tu debugues ton script pas à pas forcement tu trouveras.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Sinon tu peux tenter un exorcisme, un sacrifice de poulet, ou de danser sur une jambe autour de ton ordi enroulé dans du jambon.
    A noter que tu ne nous as toujours pas dit quel était le problème : trop de jours, pas assez, une erreur ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

Discussions similaires

  1. vba- création de classeurs pour chaque jour ouvré d'un mois
    Par sickos dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/04/2016, 02h14
  2. [XL-2007] Fonction serie.jour.ouvré pour les dates
    Par Nounours1 dans le forum Excel
    Réponses: 6
    Dernier message: 10/09/2012, 10h26
  3. Réponses: 7
    Dernier message: 22/08/2006, 16h01
  4. Excel : Nombre de jours ouvrés dans un mois
    Par repié dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/12/2005, 10h09
  5. Comment utiliser la fonction NBR.JOURS.OUVRES?
    Par MEHCOOPER dans le forum Access
    Réponses: 9
    Dernier message: 20/10/2005, 12h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo