source: companies/celepar/calendar/inc/class.holidaycalc_JP.inc.php @ 763

Revision 763, 4.3 KB checked in by niltonneto, 15 years ago (diff)

Importação inicial do Expresso da Celepar

Line 
1<?php
2  /**************************************************************************\
3  * eGroupWare - holidaycalc_JP                                              *
4  * http://www.egroupware.org                                              *
5  * Based on Yoshihiro Kamimura <your@itheart.com>                           *
6  *          http://www.itheart.com                                          *
7  * --------------------------------------------                             *
8  *  This program is free software; you can redistribute it and/or modify it *
9  *  under the terms of the GNU General Public License as published by the   *
10  *  Free Software Foundation; either version 2 of the License, or (at your  *
11  *  option) any later version.                                              *
12  \**************************************************************************/
13
14
15        class holidaycalc
16        {
17                function calculate_date($holiday, &$holidays, $year, &$i)
18                {
19                        static  $cached_month;
20                        static  $cached_day;
21                        static  $cached_observance_rule;
22
23                        if ($holiday['day'] == 0 && $holiday['dow'] != 0 && $holiday['occurence'] != 0)
24                        {
25                                $dow = $GLOBALS['phpgw']->datetime->day_of_week($year, $holiday['month'], 1);
26                                $dayshift = (($holiday['dow'] + 7) - $dow) % 7;
27                                $day = ($holiday['occurence'] - 1) * 7 + $dayshift + 1;
28
29                                // Happy monday law.
30                                if ($holiday['month'] == 1)
31                                {
32                                        if ($year < 2000)
33                                        {
34                                                $day = 15;
35                                        }
36                                }
37                                elseif ($holiday['month'] == 7)
38                                {
39                                        if ($year < 2003)
40                                        {
41                                                $day = 20;
42                                        }
43                                }
44                                elseif ($holiday['month'] == 9)
45                                {
46                                        if ($year < 2003)
47                                        {
48                                                $day = 15;
49                                        }
50                                }
51                                elseif ($holiday['month'] == 10)
52                                {
53                                        if ($year < 2000)
54                                        {
55                                                $day = 10;
56                                        }
57                                }
58                        }
59                        elseif ($holiday['day'] == 0 && $holiday['dow'] == 0 && $holiday['occurence'] == 0)
60                        {
61                                // For the next generation.
62                                // over 2151, please set $factor...
63                                if ($holiday['month'] == 3)
64                                {
65                                        // for Vernal Equinox
66                                        if ($year >= 1980 && $year <= 2099)
67                                        {
68                                                $factor = 20.8431;
69                                        }
70                                        elseif ($year >= 2100 && $year <= 2150)
71                                        {
72                                                $factor = 21.851;
73                                        }
74                                }
75                                elseif ($holiday['month'] == 9)
76                                {
77                                        // for Autumnal Equinox
78                                        if ($year >= 1980 && $year <= 2099)
79                                        {
80                                                $factor = 23.2488;
81                                        }
82                                        elseif ($year >= 2100 && $year <= 2150)
83                                        {
84                                                $factor = 24.2488;
85                                        }
86                                }
87
88                                $day = (int)($factor + 0.242194 * ($year - 1980)
89                                        - (int)(($year - 1980) / 4));
90                        }
91                        else
92                        {
93                                // normal holiday
94                                $day = $holiday['day'];
95                        }
96
97                        if ($year >= 1985 && $holiday['month'] == $cached_month && $day == $cached_day + 2 && $cached_observance_rule == True && $holiday['observance_rule'] == True)
98                        {
99                                $pdow = $GLOBALS['phpgw']->datetime->day_of_week($year,$holiday['month'],$day-1);
100                                if ($pdow != 0)
101                                {
102                                        $addcnt = count($holidays) + 1;
103                                        $holidays[$addcnt]['locale'] = $holiday['locale'];
104                                        if ($pdow == 1)
105                                        {
106                                                $holidays[$addcnt]['name'] = lang('overlap holiday');
107                                        }
108                                        else
109                                        {
110                                                $holidays[$addcnt]['name'] = lang('people holiday');
111                                        }
112                                        $holidays[$addcnt]['day'] = $day - 1;
113                                        $holidays[$addcnt]['month'] = $holiday['month'];
114                                        $holidays[$addcnt]['occurence'] = 0;
115                                        $holidays[$addcnt]['dow'] = 0;
116                                        $holidays[$addcnt]['date'] = mktime(0,0,0,$holiday['month'],$day-1,$year);
117                                        $holidays[$addcnt]['observance_rule'] = 0;
118                                }
119                        }
120
121                        $cached_month = $holiday['month'];
122                        $cached_day = $day;
123                        $cached_observance_rule = $holiday['observance_rule'];
124
125                        if ($year >= 1985 && $holiday['month'] == 5 && $day == 3)
126                        {
127                                ;
128                        }
129                        elseif ($holiday['observance_rule'] == True)
130                        {
131                                $dow = $GLOBALS['phpgw']->datetime->day_of_week($year,$holiday['month'],$day);
132                                // This now calulates Observed holidays and creates a new entry for them.
133                                if($dow == 0)
134                                {
135                                        $addcnt = count($holidays) + 1;
136                                        $holidays[$addcnt]['locale'] = $holiday['locale'];
137                                        $holidays[$addcnt]['name'] = lang('overlap holiday');
138                                        $holidays[$addcnt]['day'] = $day + 1;
139                                        $holidays[$addcnt]['month'] = $holiday['month'];
140                                        $holidays[$addcnt]['occurence'] = $holiday['occurence'];
141                                        $holidays[$addcnt]['dow'] = $holiday['dow'];
142                                        $holidays[$addcnt]['date'] = mktime(0,0,0,$holiday['month'],$day+1,$year);
143                                        $holidays[$addcnt]['observance_rule'] = 0;
144                                }
145                        }
146
147                        $date = mktime(0,0,0,$holiday['month'],$day,$year);
148
149                        return $date;
150                }
151        }
152?>
Note: See TracBrowser for help on using the repository browser.