<?php
function e_zi_lucrătoare(DateTime $date){
if($date->format('N')>5) return false;// sâmbătă sau duminică
$sarbatori_legale_statice=[
1 => [
1 => true,//Anul Nou
2 => true
],
5 => [
1 => true// Ziua Muncii
],
8 => [
15 => true// Adormirea Maicii Domnului
],
11 => [
30 => true// Sfântul Apostol Andrei cel Întâi chemat, Ocrotitorul României
],
12 => [
1 => true,// Ziua Națională (Ziua Marii Uniri)
25 => true,// Crăciunul
26 => true
],
];
$luna=$date->format('n');
if(
isset($sarbatori_legale_statice[$luna])
&&
isset($sarbatori_legale_statice[$luna][$date->format('j')])
) return false;
$year=$date->format('Y');
// paștele
// http://php.net/manual/ro/function.easter-date.php#83794
$a = $year % 4;
$b = $year % 7;
$c = $year % 19;
$d = (19 * $c + 15) % 30;
$e = (2 * $a + 4 * $b - $d + 34) % 7;
$month = floor(($d + $e + 114) / 31);
if($month<10)$month='0'.$month;
$day = (($d + $e + 114) % 31) + 1;
if($day<10)$day='0'.$day;
$easter=new DateTime("$year-$month-$day");
$easter->modify('+13 days');
if($date == $easter)//prima zi de paște
return false;
$easter->modify('+1 days');
if($date == $easter)//a doua zi de paște
return false;
$easter->modify('+48 days');
if($date == $easter)//rusaliile
return false;
$easter->modify('+1 days');
if($date == $easter)//a doua zi de rusalii
return false;
return true;
}
var_dump(e_zi_lucrătoare(new DateTime('2014-06-09')));