Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. <?php
  2.  
  3. function e_zi_lucrătoare(DateTime $date){
  4.  
  5.         if($date->format('N')>5) return false;// sâmbătă sau duminică
  6.  
  7.         $sarbatori_legale_statice=[
  8.             1 => [
  9.                 1 => true,//Anul Nou
  10.                 2 => true
  11.             ],
  12.             5 => [
  13.                 1 => true// Ziua Muncii
  14.             ],
  15.             8 => [
  16.                 15 => true// Adormirea Maicii Domnului
  17.             ],
  18.             11 => [
  19.                 30 => true// Sfântul Apostol Andrei cel Întâi chemat, Ocrotitorul României
  20.             ],
  21.             12 => [
  22.                 1 => true,// Ziua Națională (Ziua Marii Uniri)
  23.                 25 => true,// Crăciunul
  24.                 26 => true
  25.             ],
  26.         ];
  27.  
  28.         $luna=$date->format('n');
  29.         if(
  30.             isset($sarbatori_legale_statice[$luna])
  31.                 &&
  32.             isset($sarbatori_legale_statice[$luna][$date->format('j')])
  33.         ) return false;
  34.  
  35.         $year=$date->format('Y');
  36.         // paștele
  37.         // http://php.net/manual/ro/function.easter-date.php#83794
  38.             $a = $year % 4;
  39.             $b = $year % 7;
  40.             $c = $year % 19;
  41.             $d = (19 * $c + 15) % 30;
  42.             $e = (2 * $a + 4 * $b - $d + 34) % 7;
  43.  
  44.             $month = floor(($d + $e + 114) / 31);
  45.             if($month<10)$month='0'.$month;
  46.             $day = (($d + $e + 114) % 31) + 1;
  47.             if($day<10)$day='0'.$day;
  48.  
  49.             $easter=new DateTime("$year-$month-$day");
  50.             $easter->modify('+13 days');
  51.  
  52.         if($date == $easter)//prima zi de paște
  53.             return false;
  54.  
  55.         $easter->modify('+1 days');
  56.         if($date == $easter)//a doua zi de paște
  57.             return false;
  58.  
  59.  
  60.         $easter->modify('+48 days');
  61.         if($date == $easter)//rusaliile
  62.             return false;
  63.  
  64.         $easter->modify('+1 days');
  65.         if($date == $easter)//a doua zi de rusalii
  66.             return false;
  67.            
  68.  
  69.         return true;
  70.     }
  71.  
  72. var_dump(e_zi_lucrătoare(new DateTime('2014-06-09')));