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

Soyez le premier à donner votre avis sur cette source.

Vue 34 563 fois - Téléchargée 548 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

Messages postés
6
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
11 août 2008

@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]!="") {...}
Messages postés
27
Date d'inscription
dimanche 13 janvier 2008
Statut
Membre
Dernière intervention
19 juillet 2010

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 !';
Messages postés
2
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
9 décembre 2009

Merci cyberDenix, cela me semble plus propre
Messages postés
17
Date d'inscription
lundi 6 octobre 2003
Statut
Membre
Dernière intervention
24 décembre 2007

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...';
Messages postés
17
Date d'inscription
lundi 6 octobre 2003
Statut
Membre
Dernière intervention
24 décembre 2007

Le lendemain de noël, c'est pas le 26/12 au lieu du 25/12 ?
Et puis il me semble que le vendredi saint est un jour de fête réservé à l'Alsace.
Et il y a encore toutes les exception de Guyane...etc.

http://fr.wikipedia.org/wiki/Jour_f%C3%A9ri%C3%A9#France

Bon courage :)
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.