Posts get working days for this month and exclude Greek holidays!
Post
Cancel

get working days for this month and exclude Greek holidays!

PHP has builtin function for find Catholic easter via easter_date() method, what about Orthodox Easter ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
//call1
$x = new SimpleWorkingDays();
$days = $x->get_month_working_days(date('n'), date('Y'));  //for this month this year.

//call2
echo ""Holidays out of 22 : ";

$d_start= date("Y-01-01");
$d_end= date("Y-12-31");
$row_set=getSet($db, "select date_start, date_end from user_vacations where user_id=".$_SESSION['id']." and authorized=1 and date_end between '{$d_start}' and '{$d_end}'",null);
$count_working_days = 0;

foreach($row_set as $row) {
$count_working_days += $x->get_month_working_days_between_range($row["date_start"],$row["date_end"]);
}

echo $count_working_days. " days";?

////////////////////////
//////////////the class
////////////////////////
class SimpleWorkingDays
{
	//http://php.net/manual/fr/function.easter-date.php#83794
	private function orthodox_eastern($year) { 
	    $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); 
	    $day = (($d + $e + 114) % 31) + 1; 

	    $de = mktime(0, 0, 0, $month, $day + 13, $year); 

	    return date('Y-m-d',$de); 
	} 

	private function get_vacation_days($year)
	{
		$vacations = array();
		$easter = $this->orthodox_eastern($year);
		$vacations[] = "01.01"; //prwtoxronia
		$vacations[] = "06.01"; //8eofaneia
		$vacations[] = "25.03"; //25march
		$vacations[] = "01.05"; //1may - ergatikh protomagia
		$vacations[] = "15.08"; //15aug - koimhsh 8eotokoy
		$vacations[] = "26.10"; //26oct - polioyxoy 8essalonikhs
		$vacations[] = "28.10"; //28oct - epeteios toy oxi
		$vacations[] = "25.12"; //25dec - christmas
		$vacations[] = "26.12"; //26dec - christmas - 2nd day - syna3is tis 8eotokoy
		$vacations[] = date('d.m',strtotime($easter)); //orthodox easter
		$vacations[] = date('d.m',strtotime($easter."-48 days")); //clean monday
		$vacations[] = date('d.m',strtotime($easter."-2 days")); //big friday
		$vacations[] = date('d.m',strtotime($easter."+50 days")); //agioy pneymatos
		$vacations[] = date('d.m',strtotime($easter."+1 days")); //monday pasxa

		return $vacations;
	}

	//get working days between range
	function get_month_working_days_between_range($date_one, $date_two)
	{
		$start = strtotime($date_one);
		$end = strtotime($date_two);

		$year = date("Y", $start); 

		$vacation_days = $this->get_vacation_days($year);

		$no_days=0;

		while ($start <= $end) {
			$get_name4vacation = date('d.m', $start);

			//when doesnt exist in vacation days			
			if (!in_array($get_name4vacation, $vacation_days)){
				$what_day = date("N", $start);

			    if($what_day < 6) // 6 and 7 are weekend days
			        $no_days++;
		    }

		    $start += 86400; // +1 day
		}

		return $no_days;
	}
	//get working day in month
	function get_month_working_days($month, $year)
	{
		$day_count = cal_days_in_month(CAL_GREGORIAN, $month, $year); // builtin function - get amount of days
		$vacation_days = $this->get_vacation_days($year);

		$exclude=0;

		for ($i = 1; $i <= $day_count; $i++) {
				$get_name = date('D', strtotime($year.'/'.$month.'/'.$i)); //get day
			    $get_name4vacation = date('d.m', strtotime($year.'/'.$month.'/'.$i));

				if($get_name == 'Sun' || $get_name == 'Sat' || in_array($get_name4vacation, $vacation_days)){
					$exclude+=1;
				}
		}

		return ($day_count - $exclude);
	}
}

origin - http://www.pipiscrew.com/?p=1529 php-get-working-days-for-this-month-and-exclude-greek-holidays

This post is licensed under CC BY 4.0 by the author.
Contents

Trending Tags