Liste des jours fériés d'une année

3/5 (13 avis)

Vue 36 778 fois - Téléchargée 583 fois


Description

L'objectif est de lister dans un tableau les jours fériés d'une année donnée.

De cette façon si vous devez vérifier si une date est ouvrable,
vous n'avez plus qu'à tester qu'elle n'est pas dans le tableau des jours
fériés...

++

Zlub

Source / Exemple :


<?php

function ferie($mois,$an, $alsace = false){
    if (is_array($mois)){
    	$retour = array();
    	foreach ($mois as $m) {
			$r = ferie($m, $an);
			$retour[$m] = ferie($m, $an);
    	}
    	return $retour;
    }

    // calcul des jours feries pour un seul mois.
    if (mktime(0,0,0,$mois, 1,$an) == -1) { return FALSE;}
    list($mois, $an) = explode("-", date("m-Y", mktime(0,0,0,$mois, 1, $an)));
    $an = intval($an);
    $mois = intval($mois);

    // une constante
    $jour = 3600*24;

    // les jours fixes
	$ferie["Jour de l'an"][1]              = 1;
	$ferie["Armistice 39-45 "][5]          = 8;
	$ferie["Toussaint"][11]                = 1;
	$ferie["Armistice 14-18"][11]          = 11;
	$ferie["Assomption"][8]                = 15;
	$ferie["Fête du travail "][5]    = 1;
	$ferie["Fête nationale"][7]      = 14;
	$ferie["Noël"][12]                = 25;
    if ($alsace)
        $ferie["Lendemain de Noël (Alsace seulement)"][12]	= 25;

    // quelques fetes mobiles
    $lundi_de_paques['mois'] = date( "n", easter_date($an)+1*$jour);
    $lundi_de_paques['jour'] = date( "j", easter_date($an)+1*$jour);
    $lundi_de_paques['nom']  = "Lundi de Pâques";

    $ascencion['mois'] = date( "n", easter_date($an)+39*$jour);
    $ascencion['jour'] = date( "j", easter_date($an)+39*$jour);
    $ascencion['nom']  = "Jeudi de l'ascenscion";

    $vendredi_saint['mois'] = date( "n", easter_date($an)-2*$jour);
    $vendredi_saint['jour'] = date( "j", easter_date($an)-2*$jour);
    $vendredi_saint['nom']  = "Vendredi Saint";

    $lundi_de_pentecote['mois'] = date( "n", easter_date($an)+50*$jour);
    $lundi_de_pentecote['jour'] = date( "j", easter_date($an)+50*$jour);
    $lundi_de_pentecote['nom']  = "Lundi de Pentecôte";

	$ferie[$lundi_de_paques['nom']][$lundi_de_paques['mois']] = $lundi_de_paques['jour'];
	$ferie[$lundi_de_pentecote['nom']][$lundi_de_pentecote['mois']] = $lundi_de_pentecote['jour'];
	$ferie[$ascencion['nom']][$ascencion['mois']] = $ascencion['jour'];
	if ($alsace)
	   $ferie[$vendredi_saint['nom']." (Alsace)"][$vendredi_saint['mois']]= $vendredi_saint['jour'];

    // reponse
	$reponse = array();
	while(list($nom, $date)= each($ferie)){
		if (isset($date[$mois])){
			// une fete a date calculable
			$reponse[$date[$mois]]=$nom;
		} 
	}
	ksort($reponse);
	return $reponse;
}
function tab_jours_feriés($an) {
    return ferie(range(1,12),$an);
}

/************ EXECUTION *********************/
$année = date("Y");
$fériées = tab_jours_feriés($année);

echo "<br>";
while (list($mois, $tab) = each ($fériées)) {
    while (list($jour, $fete) = each ($tab)) {
        echo "$jour/$mois/$année  => $fete \n<br>";
    }

}
?>

Conclusion :


vous pouver definir la plage de calcul de la liste des jours fériés :

ferie(range(7,9),$an); // pour calculer entre Juillet et Septembre
ferie(range(7,7),$an); // pour calculer pour Juillet
ferie(range(1,12),$an); // ou tab_jours_feriés($an) .... pour calculer pour toute l'année

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Alsace-Moselle (départements 67, 68 et 57).
chris188 Messages postés 6 Date d'inscription mercredi 8 février 2006 Statut Membre Dernière intervention 11 août 2008
24 déc. 2009 à 12:34
@pharm : et on peut aussi remplir le tableau dans l'autre sens pour avoir accès aux 2

$tableau=GetJoursFeries(2009);

echo $tableau["Assomption"];

if ($tableau[$daterecherchee]!="") {...}
kromei Messages postés 27 Date d'inscription dimanche 13 janvier 2008 Statut Membre Dernière intervention 19 juillet 2010
2 avril 2009 à 08:27
bonjour je sais que cela fait 3 mois depuis le dernier commentaire mais dans le dernier code

echo 'c'est un jour férié, youpi !';

vois avez juste oublié le \

echo 'c\'est un jour férié, youpi !';
lbaumont Messages postés 2 Date d'inscription mardi 17 juin 2008 Statut Membre Dernière intervention 9 décembre 2009
6 janv. 2009 à 15:02
Merci cyberDenix, cela me semble plus propre
CyberDenix Messages postés 17 Date d'inscription lundi 6 octobre 2003 Statut Membre Dernière intervention 24 décembre 2007
16 févr. 2008 à 18:14
function getPublicHoliday($year, $month, $day, $departement = false) {
$array = array();
for ($i = 1; $i < 13; ++$i) {
$indice = ($i < 10) ? '0'.$i : $i;
$array["$indice"] = array();
}
// National public holidays
$array['01']['01'] = 'Jour de l\'an';
$array['05']['01'] = 'Fête du travail';
$array['05']['08'] = 'Armistice 39-45';
$array['07']['14'] = 'Fête nationale';
$array['08']['15'] = 'Assomption';
$array['11']['01'] = 'Toussaint';
$array['11']['11'] = 'Armistice 14-18';
$array['12']['25'] = 'Noël';
$timestamp = mktime(0, 0, 0, 03, 21 + easter_days($year) + 1, $year);
$array[date('m', $timestamp)][date('d', $timestamp)] = 'Lundi de Pâques';
$timestamp = mktime(0, 0, 0, 03, 21 + easter_days($year) + 39, $year);
$array[date('m', $timestamp)][date('d', $timestamp)] = 'Jeudi de l\'ascension';
$timestamp = mktime(0, 0, 0, 03, 21 + easter_days($year) + 50, $year);
$array[date('m', $timestamp)][date('d', $timestamp)] = 'Lundi de Pentecôte';
// Spécial Public holidays if ($departement && ($departement '57' || $departement '67' || $departement == '68')) {
$timestamp = mktime(0, 0, 0, 03, 21 + easter_days($year) - 2, $year);
$array[date('m', $timestamp)][date('d', $timestamp)] = 'Vendredi saint';
$array['12']['26'] = 'Lendemain de Noël';
}
if ($departement && $departement == '971')
$array['05']['27'] = 'Abolition de l\'esclavage';
if ($departement && $departement == '972')
$array['05']['22'] = 'Abolition de l\'esclavage';
if ($departement && $departement == '973')
$array['06']['10'] = 'Abolition de l\'esclavage';
if ($departement && $departement == '974')
$array['12']['20'] = 'Abolition de l\'esclavage';
// Check if the date is a public holiday
$monthToPrint = ($month < 10) ? '0'.$month : $month;
$dayToPrint = ($day < 10) ? '0'.$day : $day;
if (isset($array["$monthToPrint"]) && isset($array["$monthToPrint"]["$dayToPrint"]))
return $array["$monthToPrint"]["$dayToPrint"];
return false;
}

if (getPublicHoliday(2007, 2, 16))
echo 'c'est un jour férié, youpi !';
else
echo 'snif...';
Afficher les 13 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.