Au Canada, dépendamment de la province dans lequel on vit, les jours fériés, tombant des jours de semaines sont souvent assez difficile à identifié, car si par exemple, la fête du Québec est un dimanche, ce sera le Lundi allant être congé. De plus, certaines fêtes s'appliquent à des provinces et pas à d'autres et enfin dans certaines provinces il y a des dédoublements de fêtes la même journée. A l'aide du code source PHP suivant, vous trouverez la réponse que vous souhaitez :
- <?php
- function BooleanToStr($value) {
- return $value?"TRUE":"FALSE";
- }
-
- function DateOfEaster($year,& $month,& $day) {
- $g = ($year % 19) + 1;
- $c = floor($year / 100) + 1;
- $x = floor((3 * $c) / 4) - 12;
- $z = floor((8 * $c + 5) / 25) - 5;
- $d = floor((5 * $year) / 4) - $x - 10;
- $e = floor(11 * $g + 20 + $z - $x) % 30;
- if($e < 0) $e += 30;
- if((($e == 25) && ($g > 11)) || ($e == 24)) $e++;
- $n = 44 - $e;
- if($n < 21) $n += 30;
- $n = $n + 7 - (($d + $n) % 7);
- if($n > 31) {
- $month = 4;
- $day = $n - 31;
- } else {
- $month = 3;
- $day = $n;
- }
- return array($month,$day);
- }
-
- function IsHoliday($Date,$ProvinceMID) {
- $Year = date("Y",strtotime($Date));
- // Jour de l'an / New Year's Day ?
- if(date("w",strtotime($Year."-01-01")) == 6) { // Est-ce un Samedi ?
- if(strtotime($Date) == strtotime($Year."-01-03")) return true; // Calcul pour le Lundi
- } elseif(date("w",strtotime($Year."-01-01")) == 0) { // Est-ce un Dimanche ?
- if(strtotime($Date) == strtotime($Year."-01-02")) return true; // Calcul pour le Lundi
- } elseif(strtotime($Date) == strtotime($Year."-01-01")) return true;
-
- // Jour de la famille / Family Day en Ontario, Saskatechewan et Alberta ou Fête de Louis Riel au Manitoba ?
- if(($ProvinceMID == "ON") || ($ProvinceMID == "SK") || ($ProvinceMID == "AL") || ($ProvinceMID == "MA")) {
- if(strtotime($Date) == strtotime($Year."-02-01 first monday +2 weeks")) return true;
- }
-
- // Vendredi Saint de Pâque / Good Friday ?
- DateOfEaster($Year,$month,$day);
- if(strtotime($Date) == strtotime($Year."-".$month."-".$day." last friday")) return true;
-
- // Fête des Patriotes / Fête de Dollard / Victoria Day ?
- if(strtotime($Date) == strtotime($Year."-05-25 last monday")) return true;
-
- // Fête du Québec ?
- if(($ProvinceMID == "QC") || ($ProvinceMID == "PQ")) {
- if(date("w",strtotime($Year."-06-24")) == 6) { // Est-ce un Samedi ?
- if(strtotime($Date) == strtotime($Year."-06-26")) return true; // Calcul pour le Lundi
- } elseif(date("w",strtotime($Year."-06-24")) == 0) { // Est-ce un Dimanche ?
- if(strtotime($Date) == strtotime($Year."-06-25")) return true; // Calcul pour le Lundi
- } elseif(strtotime($Date) == strtotime($Year."-06-24")) return true;
- }
-
- // Fête du Canada / Canada Day ?
- if(date("w",strtotime($Year."-07-01")) == 6) { // Est-ce un Samedi ?
- if(strtotime($Date) == strtotime($Year."-07-03")) return true; // Calcul pour le Lundi
- } elseif(date("w",strtotime($Year."-07-01")) == 0) { // Est-ce un Dimanche ?
- if(strtotime($Date) == strtotime($Year."-07-02")) return true; // Calcul pour le Lundi
- } elseif(strtotime($Date) == strtotime($Year."-07-01")) return true;
-
- // Fête du travail / Labour Day ?
- if(strtotime($Date) == strtotime($Year."-09-01 first monday")) return true;
-
- // Fête de l'action de Grâce / Thanksgiving Day ?
- if(strtotime($Date) == strtotime($Year."-10-01 first monday +1 week")) return true;
-
- // Jour de Noël / Christmas Day ?
- if(date("w",strtotime($Year."-12-25")) == 6) { // Est-ce un Samedi ?
- if(strtotime($Date) == strtotime($Year."-12-27")) return true;
- } elseif(date("w",strtotime($Year."-12-25")) == 0) { // Est-ce un Dimanche ?
- if(strtotime($Date) == strtotime($Year."-12-26")) return true; // Calcul pour le Lundi
- } else {
- if(strtotime($Date) == strtotime($Year."-12-25")) return true;
- }
-
- // Lendemain de Noël / Boxing Day ?
- if($ProvinceMID == "ON") {
- if(date("w",strtotime($Year."-12-26")) == 6) { // Est-ce un Samedi ?
- if(strtotime($Date) == strtotime($Year."-12-28")) return true; // Calcul pour le Lundi
- } elseif(date("w",strtotime($Year."-12-26")) == 0) { // Est-ce un Dimanche ?
- if(strtotime($Date) == strtotime($Year."-12-28")) return true; // Calcul pour le Mardi
- } elseif(date("w",strtotime($Year."-12-26")) == 1) { // Est-ce un Lundi, donc le 25 est un Dimanche ?
- if(strtotime($Date) == strtotime($Year."-12-28")) return true; // Calcul pour le Mardi
- } else {
- if(strtotime($Date) == strtotime($Year."-12-26")) return true;
- }
- }
- return false;
- }
-
- echo "N.B. : Le programme ajuste les jours fériés afin de toujours tomber sur des jours de semaines<br />";
- echo "Jour férié au Québec :<br />";
- echo "2010-01-01 = ".BooleanToStr(IsHoliday("2010-01-01","QC"))."<br />";
- echo "2010-01-02 = ".BooleanToStr(IsHoliday("2010-01-02","QC"))."<br />";
- echo "2010-05-24 = ".BooleanToStr(IsHoliday("2010-05-24","QC"))."<br />";
- echo "2010-06-24 = ".BooleanToStr(IsHoliday("2010-06-24","QC"))."<br />";
- echo "2010-07-01 = ".BooleanToStr(IsHoliday("2010-07-01","QC"))."<br />";
- echo "2010-12-25 = ".BooleanToStr(IsHoliday("2010-12-25","QC"))."<br />";
- echo "2010-12-26 = ".BooleanToStr(IsHoliday("2010-12-26","QC"))."<br />";
- echo "2010-12-27 = ".BooleanToStr(IsHoliday("2010-12-27","QC"))."<br />";
- echo "2010-12-28 = ".BooleanToStr(IsHoliday("2010-12-28","QC"))."<br />";
- echo "Jour férié en Ontario :<br />";
- echo "2010-01-01 = ".BooleanToStr(IsHoliday("2010-01-01","ON"))."<br />";
- echo "2010-01-02 = ".BooleanToStr(IsHoliday("2010-01-02","ON"))."<br />";
- echo "2010-05-24 = ".BooleanToStr(IsHoliday("2010-05-24","ON"))."<br />";
- echo "2010-06-24 = ".BooleanToStr(IsHoliday("2010-06-24","ON"))."<br />";
- echo "2010-07-01 = ".BooleanToStr(IsHoliday("2010-07-01","ON"))."<br />";
- echo "2010-12-25 = ".BooleanToStr(IsHoliday("2010-12-25","ON"))."<br />";
- echo "2010-12-26 = ".BooleanToStr(IsHoliday("2010-12-26","ON"))."<br />";
- echo "2010-12-27 = ".BooleanToStr(IsHoliday("2010-12-27","ON"))."<br />";
- echo "2010-12-28 = ".BooleanToStr(IsHoliday("2010-12-28","ON"))."<br />";
- ?>
on obtiendra le résultat suivant:
N.B. : Le programme ajuste les jours fériés afin de toujours tomber sur des jours de semainesJour férié au Québec :
2010-01-01 = TRUE
2010-01-02 = FALSE
2010-05-24 = TRUE
2010-06-24 = TRUE
2010-07-01 = TRUE
2010-12-25 = FALSE
2010-12-26 = FALSE
2010-12-27 = TRUE
2010-12-28 = FALSE
Jour férié en Ontario :
2010-01-01 = TRUE
2010-01-02 = FALSE
2010-05-24 = TRUE
2010-06-24 = FALSE
2010-07-01 = TRUE
2010-12-25 = FALSE
2010-12-26 = FALSE
2010-12-27 = TRUE
2010-12-28 = TRUE
Dernière mise à jour : Mardi, le 20 octobre 2009