Accueil de Gladir.com Notes légales de Gladir.com Flux RSS des nouvelles du site Gladir.com - PHP - Temps - Est-ce un jour férié Section du logiciel DOS «MonsterBook» Inventaire de la bibliothèque de Gladir.com Entrée administrateur

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: Jeudi, le 22 octobre 2009