Section courante

A propos

Section administrative du site

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 :

  1. <?php
  2. function BooleanToStr($value) {
  3.      return $value?"TRUE":"FALSE";
  4. }
  5.  
  6. function DateOfEaster($year,& $month,& $day) {
  7.      $g = ($year % 19) + 1;
  8.      $c = floor($year / 100) + 1;
  9.      $x = floor((3 * $c) / 4) - 12;
  10.      $z = floor((8 * $c + 5) / 25) - 5;
  11.      $d = floor((5 * $year) / 4) - $x - 10;
  12.      $e = floor(11 * $g + 20 + $z - $x) % 30;
  13.      if($e < 0) $e += 30;
  14.      if((($e == 25) && ($g > 11)) || ($e == 24)) $e++;
  15.      $n = 44 - $e;
  16.      if($n < 21) $n += 30;
  17.      $n = $n + 7 - (($d + $n) % 7);
  18.      if($n > 31) {
  19.         $month = 4;
  20.         $day = $n - 31;
  21.      } else {
  22.         $month = 3;
  23.         $day = $n;
  24.      }
  25.       return array($month,$day);
  26. }
  27.  
  28. function IsHoliday($Date,$ProvinceMID) {
  29.      $Year = date("Y",strtotime($Date));
  30.           // Jour de l'an / New Year's Day ?
  31.      if(date("w",strtotime($Year."-01-01")) == 6) {  // Est-ce un Samedi ?
  32.           if(strtotime($Date) == strtotime($Year."-01-03")) return true; // Calcul pour le Lundi
  33.      } elseif(date("w",strtotime($Year."-01-01")) == 0) {  // Est-ce un Dimanche ?
  34.           if(strtotime($Date) == strtotime($Year."-01-02")) return true; // Calcul pour le Lundi
  35.      } elseif(strtotime($Date) == strtotime($Year."-01-01")) return true; 
  36.      
  37.           // Jour de la famille / Family Day en Ontario, Saskatechewan et Alberta ou Fête de Louis Riel au Manitoba ?
  38.      if(($ProvinceMID == "ON") || ($ProvinceMID == "SK") || ($ProvinceMID == "AL") || ($ProvinceMID == "MA")) {
  39.           if(strtotime($Date) == strtotime($Year."-02-01 first monday +2 weeks")) return true; 
  40.      }
  41.      
  42.           // Vendredi Saint de Pâque / Good Friday ?
  43.      DateOfEaster($Year,$month,$day);
  44.      if(strtotime($Date) == strtotime($Year."-".$month."-".$day." last friday")) return true; 
  45.      
  46.           // Fête des Patriotes / Fête de Dollard / Victoria Day ?
  47.      if(strtotime($Date) == strtotime($Year."-05-25 last monday")) return true; 
  48.      
  49.           // Fête du Québec ?
  50.      if(($ProvinceMID == "QC") || ($ProvinceMID == "PQ")) {
  51.           if(date("w",strtotime($Year."-06-24")) == 6) {  // Est-ce un Samedi ?
  52.                if(strtotime($Date) == strtotime($Year."-06-26")) return true; // Calcul pour le Lundi
  53.           } elseif(date("w",strtotime($Year."-06-24")) == 0) {  // Est-ce un Dimanche ?
  54.                if(strtotime($Date) == strtotime($Year."-06-25")) return true; // Calcul pour le Lundi
  55.           } elseif(strtotime($Date) == strtotime($Year."-06-24")) return true; 
  56.      }
  57.      
  58.           // Fête du Canada / Canada Day ?
  59.      if(date("w",strtotime($Year."-07-01")) == 6) {  // Est-ce un Samedi ?
  60.           if(strtotime($Date) == strtotime($Year."-07-03")) return true; // Calcul pour le Lundi
  61.      } elseif(date("w",strtotime($Year."-07-01")) == 0) {  // Est-ce un Dimanche ?
  62.           if(strtotime($Date) == strtotime($Year."-07-02")) return true; // Calcul pour le Lundi
  63.      } elseif(strtotime($Date) == strtotime($Year."-07-01")) return true; 
  64.      
  65.           // Fête du travail / Labour Day ?
  66.      if(strtotime($Date) == strtotime($Year."-09-01 first monday")) return true;  
  67.      
  68.           // Fête de l'action de Grâce / Thanksgiving Day ?
  69.      if(strtotime($Date) == strtotime($Year."-10-01 first monday +1 week")) return true;
  70.      
  71.           // Jour de Noël / Christmas Day ?
  72.      if(date("w",strtotime($Year."-12-25")) == 6) {  // Est-ce un Samedi ?
  73.           if(strtotime($Date) == strtotime($Year."-12-27")) return true; 
  74.      } elseif(date("w",strtotime($Year."-12-25")) == 0) {  // Est-ce un Dimanche ?
  75.           if(strtotime($Date) == strtotime($Year."-12-26")) return true; // Calcul pour le Lundi
  76.      } else {
  77.           if(strtotime($Date) == strtotime($Year."-12-25")) return true; 
  78.      }
  79.      
  80.           // Lendemain de Noël / Boxing Day ?
  81.      if($ProvinceMID == "ON") { 
  82.           if(date("w",strtotime($Year."-12-26")) == 6) {  // Est-ce un Samedi ?
  83.                if(strtotime($Date) == strtotime($Year."-12-28")) return true; // Calcul pour le Lundi
  84.           } elseif(date("w",strtotime($Year."-12-26")) == 0) {  // Est-ce un Dimanche ?
  85.                if(strtotime($Date) == strtotime($Year."-12-28")) return true; // Calcul pour le Mardi
  86.           } elseif(date("w",strtotime($Year."-12-26")) == 1) {  // Est-ce un Lundi, donc le 25 est un Dimanche ?
  87.                if(strtotime($Date) == strtotime($Year."-12-28")) return true; // Calcul pour le Mardi
  88.           } else {
  89.                if(strtotime($Date) == strtotime($Year."-12-26")) return true; 
  90.           }
  91.      }
  92.      return false;
  93. }
  94.  
  95. echo "N.B. : Le programme ajuste les jours fériés afin de toujours tomber sur des jours de semaines<br />";
  96. echo "Jour férié au Québec :<br />";
  97. echo "2010-01-01 = ".BooleanToStr(IsHoliday("2010-01-01","QC"))."<br />";
  98. echo "2010-01-02 = ".BooleanToStr(IsHoliday("2010-01-02","QC"))."<br />";
  99. echo "2010-05-24 = ".BooleanToStr(IsHoliday("2010-05-24","QC"))."<br />";
  100. echo "2010-06-24 = ".BooleanToStr(IsHoliday("2010-06-24","QC"))."<br />";
  101. echo "2010-07-01 = ".BooleanToStr(IsHoliday("2010-07-01","QC"))."<br />";
  102. echo "2010-12-25 = ".BooleanToStr(IsHoliday("2010-12-25","QC"))."<br />";
  103. echo "2010-12-26 = ".BooleanToStr(IsHoliday("2010-12-26","QC"))."<br />";
  104. echo "2010-12-27 = ".BooleanToStr(IsHoliday("2010-12-27","QC"))."<br />";
  105. echo "2010-12-28 = ".BooleanToStr(IsHoliday("2010-12-28","QC"))."<br />";
  106. echo "Jour férié en Ontario :<br />";
  107. echo "2010-01-01 = ".BooleanToStr(IsHoliday("2010-01-01","ON"))."<br />";
  108. echo "2010-01-02 = ".BooleanToStr(IsHoliday("2010-01-02","ON"))."<br />";
  109. echo "2010-05-24 = ".BooleanToStr(IsHoliday("2010-05-24","ON"))."<br />";
  110. echo "2010-06-24 = ".BooleanToStr(IsHoliday("2010-06-24","ON"))."<br />";
  111. echo "2010-07-01 = ".BooleanToStr(IsHoliday("2010-07-01","ON"))."<br />";
  112. echo "2010-12-25 = ".BooleanToStr(IsHoliday("2010-12-25","ON"))."<br />";
  113. echo "2010-12-26 = ".BooleanToStr(IsHoliday("2010-12-26","ON"))."<br />";
  114. echo "2010-12-27 = ".BooleanToStr(IsHoliday("2010-12-27","ON"))."<br />";
  115. echo "2010-12-28 = ".BooleanToStr(IsHoliday("2010-12-28","ON"))."<br />";
  116. ?>

on obtiendra le résultat suivant:

N.B. : Le programme ajuste les jours fériés afin de toujours tomber sur des jours de semaines
Jour 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