|
1
|
|
|
<?php |
|
2
|
|
|
|
|
3
|
|
|
namespace Holiday\Model; |
|
4
|
|
|
|
|
5
|
|
|
abstract class AbstractHoliday implements HolidayInterface |
|
6
|
|
|
{ |
|
7
|
|
|
const TIME_ZONE = 'Europe/Paris'; |
|
8
|
|
|
|
|
9
|
|
|
const MONDAY = 'Monday'; |
|
10
|
|
|
const TUESDAY = 'Tuesday'; |
|
11
|
|
|
const WEDNESDAY = 'Wednesday'; |
|
12
|
|
|
const THURSDAY = 'Thursday'; |
|
13
|
|
|
const FRIDAY = 'Friday'; |
|
14
|
|
|
const SATURDAY = 'Saturday'; |
|
15
|
|
|
const SUNDAY = 'Sunday'; |
|
16
|
|
|
|
|
17
|
|
|
const FILTER_MODE_INCLUSION = 'INCLUSION'; |
|
18
|
|
|
const FILTER_MODE_EXCLUSION = 'EXCLUSION'; |
|
19
|
|
|
|
|
20
|
|
|
public static function getEasterDate($year) |
|
21
|
|
|
{ |
|
22
|
|
|
$easter = new \DateTime('@' . easter_date($year)); |
|
23
|
|
|
$easter->setTimezone(new \DateTimeZone(self::TIME_ZONE)); |
|
24
|
|
|
|
|
25
|
|
|
return $easter ; |
|
26
|
|
|
} |
|
27
|
|
|
|
|
28
|
|
|
public static function getEasterMonday($year) |
|
29
|
|
|
{ |
|
30
|
|
|
return self::getEasterDate($year)->add(new \DateInterval('P1D')); |
|
31
|
|
|
} |
|
32
|
|
|
|
|
33
|
|
|
public static function getAscensionDay($year) |
|
34
|
|
|
{ |
|
35
|
|
|
return self::getEasterDate($year)->add(new \DateInterval('P39D')); |
|
36
|
|
|
} |
|
37
|
|
|
|
|
38
|
|
|
public static function getWitmonday($year) |
|
39
|
|
|
{ |
|
40
|
|
|
return self::getEasterDate($year)->add(new \DateInterval('P50D')); |
|
41
|
|
|
} |
|
42
|
|
|
|
|
43
|
|
|
public static function isClosedDay(\Datetime $date) |
|
44
|
|
|
{ |
|
45
|
|
|
$year = intval($date->format('Y')); |
|
46
|
|
|
$holidaysString = array_map(function ($holiday) { |
|
47
|
|
|
return $holiday->format('y-m-d') ; |
|
48
|
|
|
}, static::getHolidays($year)); |
|
49
|
|
|
|
|
50
|
|
|
return in_array($date->format('y-m-d'), $holidaysString) ? true : false ; |
|
51
|
|
|
} |
|
52
|
|
|
|
|
53
|
|
|
public static function getFilteredHolidays($year, array $filters, $mode = self::FILTER_MODE_EXCLUSION) |
|
54
|
|
|
{ |
|
55
|
|
|
$holidays = static::getHolidays($year); |
|
56
|
|
|
$cleanedHolidays = []; |
|
57
|
|
|
foreach ($holidays as $holiday) { |
|
58
|
|
|
if ($mode === self::FILTER_MODE_EXCLUSION) { |
|
59
|
|
|
if (!in_array($holiday->format('l'), $filters)) { |
|
60
|
|
|
$cleanedHolidays [] = $holiday; |
|
61
|
|
|
} |
|
62
|
|
|
} else { |
|
63
|
|
|
if (in_array($holiday->format('l'), $filters)) { |
|
64
|
|
|
$cleanedHolidays [] = $holiday; |
|
65
|
|
|
} |
|
66
|
|
|
} |
|
67
|
|
|
} |
|
68
|
|
|
|
|
69
|
|
|
return $cleanedHolidays; |
|
70
|
|
|
} |
|
71
|
|
|
} |
|
72
|
|
|
|