calendrier

Récupérer les jours fériés en PHP

Temps de lecture : 1 minute

Récemment, il m’a fallu récupérer une liste des jours fériés grâce à PHP. Comme vous le savez probablement, nous disposons en France de 11 jours fériés : la date de 8 d’entre eux est très facile à déterminer puisque celle-ci ne change pas au cours des ans. Mais en ce qui concerne les 3 derniers, ceux-ci sont basés sur le jour de Pâque qui je cite Wikipedia «est célébré le dimanche après le 14e jour du premier mois lunaire du printemps, donc le dimanche après la première pleine lune advenant pendant ou après l’équinoxe de printemps». Bref, après quelques recherches, je suis tombé sur une fonction PHP bien sympathique qui permet de retourner un timestamp UNIX pour Pâque, à minuit pour une année donnée : easter_date().

Et comme bien souvent sur php.net, la réponse à ma question était déjà présente dans l’un des commentaires. Voici donc la fonction qui vous retournera un tableau des jours fériés en France, au format timestamp UNIX, et ce pour une année donnée (en remerciant l’auteur de cette fonction).

Source : http://php.net/manual/fr/function.easter-date.php

Réagissez à l'article

  • Markus

    Avec ces valeurs et une configuration sur les fuseaux horaires Europe/Paris il y a un probleme pour certaine dates non fixées :

    date(‘Y-m-j’,mktime(0, 0, 0, $easterMonth, $easterDay + 1, $easterYear)),

    date(‘Y-m-j’,mktime(0, 0, 0, $easterMonth, $easterDay + 39, $easterYear)),

    date(‘Y-m-j’, mktime(0, 0, 0, $easterMonth, $easterDay + 50, $easterYear)),

    Ces valeurs sont les bonnes.

    Cordialement

    • Plouf

      Ce n’est pas plutôt +2, +40 et +51 ???

      • Vincent Schoener

        Nop, si tu regardes ce que marques Wikipédia à ce sujet, tu dois prendre en compte le jour de pâque dans le calcul. dont -1 forcément.

  • SKN

    Le commentaire de Markus est exact, le script PHP données dans cet article est correcte sauf pour les dates variables (lundi de Pâques par exemple).
    Merci à l’auteur et à Markus pour ses informations

  • Vince

    Merci pour l’article, j’avais un peu la flemme de chercher pour le coup : ) J’ai retouché la fonction pour utiliser les DateTime, ce qui évitera tout problème de calcul avec la gestion du temps et surtout les dates concernant Pâque :

    /**
    * @param DateTime $date
    *
    * @return array
    */
    static public function getPublicHolidays(DateTime $date = null)
    {
    if ($date === null) {
    $date = new DateTime();
    }

    $easterDate = new DateTime(‘@’.easter_date($date->format(‘Y’)));

    // Set Visitor / Customer TimeZone (If server not configured or using e-commerce website for ex.)
    $easterDate->setTimezone(new DateTimeZone(‘Europe/Paris’));
    $date->setTimezone(new DateTimeZone(‘Europe/Paris’));

    // Fixed date list
    $publicHolidaysList = array(
    new DateTime($date->format(‘Y-1-1’)), // 1st january
    new DateTime($date->format(‘Y-5-1’)), // May day
    new DateTime($date->format(‘Y-5-8’)), // 1945
    new DateTime($date->format(‘Y-7-14’)), // Nation Party day
    new DateTime($date->format(‘Y-8-15’)), // Assumption
    new DateTime($date->format(‘Y-11-1’)), // All Saints Day
    new DateTime($date->format(‘Y-11-11’)), // Armistice
    new DateTime($date->format(‘Y-12-25’)), // Christmas

    // Variable date from easter date
    (new DateTime($easterDate->format(‘Y-m-d’)))->modify(‘+ 1 day’),
    (new DateTime($easterDate->format(‘Y-m-d’)))->modify(‘+ 39 day’), // Don’t count the current easter day
    (new DateTime($easterDate->format(‘Y-m-d’)))->modify(‘+ 50 day’),
    );

    // Sort DateTime
    usort($publicHolidaysList, function($a, $b) {
    $interval = $a->diff($b);
    return $interval->invert ? 1 : -1;
    });
    return $publicHolidaysList;
    }

  • Vince

    Et si jamais vous souhaitez savoir si le jour demandé est férié

    /**
    * @param DateTime $date
    *
    * @return bool
    */
    static public function isDatePublicHoliday(DateTime $date = null)
    {
    if (!$date) {
    $date = new DateTime();
    }

    $isDatePublicHolidays = false;

    $publicHolidaysList = DateManager::getPublicHolidays($date);
    /** @var DateTime $publicHoliday */
    foreach ($publicHolidaysList as $publicHoliday) {
    if ($publicHoliday->format(‘Y-m-d’) == $date->format(‘Y-m-d’)) {
    $isDatePublicHolidays = true;
    break;
    }
    }
    return $isDatePublicHolidays;
    }

    • kik

      foreach puis un break dans un tableau indicé !
      Il faut faire un while sur le booléen et la taille, c’est beaucoup plus propre
      De même, il faut indenter, commenter le code, avoir des noms explicites de variables car il s’agit de mauvaises pratiques de programmation (on dirait du code Java !)

      • kik

        J’oubliais : la transformation en date sur chaque ligne du tableau (->format(‘Y-m-d’)) est couteuse. Le Java est déjà bien assez lent comme ça !

        Tu as dû sécher les cours d’algorithmique.

        • Vincent

          De quoi tu parles ? Si tu veux parler perf je suis tout ouï car ici c’est pas le sujet, et qui a parlé de Java ? .
          Pour le reste, ta version de propre est clairement subjectif, puis le poste à 2 ans, les techniques ont bien évolué. (En relisant, on appelle ça une meilleure lisibilité de code).

          – “Tu as dû sécher les cours d’algorithmique.”

          Enfin bon, tu as l’air bien placé pour l’ouvrir et juger, belle mentalité…

        • Vincent

          Je viens de voir que t’es un gros troll qui comprends rien en faite, quelle perte de temps.

  • Serge

    Bonjour,
    Je voudrais savoir comment recuperer ses jours dans ma page PHP
    Suis null je sais, je débute en pdo

  • kik

    A part les commentaires, tout le code est en anglais. Ca pue le repompage !

    • Vincent

      Et à part l’ouvrir pour raler t’as rien d’autres à faire Mr le “premier” de la classe ?..

    • Wartelle

      Par convention, on code en Anglais 🙂

    • Theo Chaumard

      Tu es un mauvais troll Corentin