Total Complexity | 52 |
Total Lines | 1484 |
Duplicated Lines | 0 % |
Changes | 3 | ||
Bugs | 1 | Features | 0 |
Complex classes like TimezoneUtil often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use TimezoneUtil, and based on these observations, apply Extract Interface, too.
1 | <?php |
||
10 | class TimezoneUtil { |
||
11 | /** |
||
12 | * list of MS and AS compatible timezones. |
||
13 | * |
||
14 | * origin: http://msdn.microsoft.com/en-us/library/ms912391%28v=winembedded.11%29.aspx |
||
15 | * dots of tz identifiers were removed |
||
16 | * |
||
17 | * Updated at: 01.06.2012 |
||
18 | */ |
||
19 | private static $mstzones = [ |
||
20 | "000" => ["Dateline Standard Time", "(GMT-12:00) International Date Line West"], |
||
21 | "001" => ["Samoa Standard Time", "(GMT-11:00) Midway Island, Samoa"], |
||
22 | "002" => ["Hawaiian Standard Time", "(GMT-10:00) Hawaii"], |
||
23 | "003" => ["Alaskan Standard Time", "(GMT-09:00) Alaska"], |
||
24 | "004" => ["Pacific Standard Time", "(GMT-08:00) Pacific Time (US and Canada); Tijuana"], |
||
25 | "010" => ["Mountain Standard Time", "(GMT-07:00) Mountain Time (US and Canada)"], |
||
26 | "013" => ["Mexico Standard Time 2", "(GMT-07:00) Chihuahua, La Paz, Mazatlan"], |
||
27 | "015" => ["US Mountain Standard Time", "(GMT-07:00) Arizona"], |
||
28 | "020" => ["Central Standard Time", "(GMT-06:00) Central Time (US and Canada"], |
||
29 | "025" => ["Canada Central Standard Time", "(GMT-06:00) Saskatchewan"], |
||
30 | "030" => ["Mexico Standard Time", "(GMT-06:00) Guadalajara, Mexico City, Monterrey"], |
||
31 | "033" => ["Central America Standard Time", "(GMT-06:00) Central America"], |
||
32 | "035" => ["Eastern Standard Time", "(GMT-05:00) Eastern Time (US and Canada)"], |
||
33 | "040" => ["US Eastern Standard Time", "(GMT-05:00) Indiana (East)"], |
||
34 | "045" => ["SA Pacific Standard Time", "(GMT-05:00) Bogota, Lima, Quito"], |
||
35 | "uk1" => ["Venezuela Standard Time", "(GMT-04:30) Caracas"], // added |
||
36 | "050" => ["Atlantic Standard Time", "(GMT-04:00) Atlantic Time (Canada)"], |
||
37 | "055" => ["SA Western Standard Time", "(GMT-04:00) Caracas, La Paz"], |
||
38 | "056" => ["Pacific SA Standard Time", "(GMT-04:00) Santiago"], |
||
39 | "060" => ["Newfoundland and Labrador Standard Time", "(GMT-03:30) Newfoundland and Labrador"], |
||
40 | "065" => ["E South America Standard Time", "(GMT-03:00) Brasilia"], |
||
41 | "070" => ["SA Eastern Standard Time", "(GMT-03:00) Buenos Aires, Georgetown"], |
||
42 | "073" => ["Greenland Standard Time", "(GMT-03:00) Greenland"], |
||
43 | "075" => ["Mid-Atlantic Standard Time", "(GMT-02:00) Mid-Atlantic"], |
||
44 | "080" => ["Azores Standard Time", "(GMT-01:00) Azores"], |
||
45 | "083" => ["Cape Verde Standard Time", "(GMT-01:00) Cape Verde Islands"], |
||
46 | "085" => ["GMT Standard Time", "(GMT) Greenwich Mean Time: Dublin, Edinburgh, Lisbon, London"], |
||
47 | "090" => ["Greenwich Standard Time", "(GMT) Casablanca, Monrovia"], |
||
48 | "095" => ["Central Europe Standard Time", "(GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague"], |
||
49 | "100" => ["Central European Standard Time", "(GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb"], |
||
50 | "105" => ["Romance Standard Time", "(GMT+01:00) Brussels, Copenhagen, Madrid, Paris"], |
||
51 | "110" => ["W Europe Standard Time", "(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna"], |
||
52 | "111" => ["W. Europe Standard Time", "(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna"], |
||
53 | "113" => ["W Central Africa Standard Time", "(GMT+01:00) West Central Africa"], |
||
54 | "115" => ["E Europe Standard Time", "(GMT+02:00) Bucharest"], |
||
55 | "120" => ["Egypt Standard Time", "(GMT+02:00) Cairo"], |
||
56 | "125" => ["FLE Standard Time", "(GMT+02:00) Helsinki, Kiev, Riga, Sofia, Tallinn, Vilnius"], |
||
57 | "130" => ["GTB Standard Time", "(GMT+02:00) Athens, Istanbul, Minsk"], |
||
58 | "135" => ["Israel Standard Time", "(GMT+02:00) Jerusalem"], |
||
59 | "140" => ["South Africa Standard Time", "(GMT+02:00) Harare, Pretoria"], |
||
60 | "145" => ["Russian Standard Time", "(GMT+03:00) Moscow, St. Petersburg, Volgograd"], |
||
61 | "150" => ["Arab Standard Time", "(GMT+03:00) Kuwait, Riyadh"], |
||
62 | "155" => ["E Africa Standard Time", "(GMT+03:00) Nairobi"], |
||
63 | "158" => ["Arabic Standard Time", "(GMT+03:00) Baghdad"], |
||
64 | "160" => ["Iran Standard Time", "(GMT+03:30) Tehran"], |
||
65 | "165" => ["Arabian Standard Time", "(GMT+04:00) Abu Dhabi, Muscat"], |
||
66 | "170" => ["Caucasus Standard Time", "(GMT+04:00) Baku, Tbilisi, Yerevan"], |
||
67 | "175" => ["Transitional Islamic State of Afghanistan Standard Time", "(GMT+04:30) Kabul"], |
||
68 | "180" => ["Ekaterinburg Standard Time", "(GMT+05:00) Ekaterinburg"], |
||
69 | "185" => ["West Asia Standard Time", "(GMT+05:00) Islamabad, Karachi, Tashkent"], |
||
70 | "190" => ["India Standard Time", "(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi"], |
||
71 | "193" => ["Nepal Standard Time", "(GMT+05:45) Kathmandu"], |
||
72 | "195" => ["Central Asia Standard Time", "(GMT+06:00) Astana, Dhaka"], |
||
73 | "200" => ["Sri Lanka Standard Time", "(GMT+06:00) Sri Jayawardenepura"], |
||
74 | "201" => ["N Central Asia Standard Time", "(GMT+06:00) Almaty, Novosibirsk"], |
||
75 | "203" => ["Myanmar Standard Time", "(GMT+06:30) Yangon Rangoon"], |
||
76 | "205" => ["SE Asia Standard Time", "(GMT+07:00) Bangkok, Hanoi, Jakarta"], |
||
77 | "207" => ["North Asia Standard Time", "(GMT+07:00) Krasnoyarsk"], |
||
78 | "210" => ["China Standard Time", "(GMT+08:00) Beijing, Chongqing, Hong Kong SAR, Urumqi"], |
||
79 | "215" => ["Singapore Standard Time", "(GMT+08:00) Kuala Lumpur, Singapore"], |
||
80 | "220" => ["Taipei Standard Time", "(GMT+08:00) Taipei"], |
||
81 | "225" => ["W Australia Standard Time", "(GMT+08:00) Perth"], |
||
82 | "227" => ["North Asia East Standard Time", "(GMT+08:00) Irkutsk, Ulaanbaatar"], |
||
83 | "230" => ["Korea Standard Time", "(GMT+09:00) Seoul"], |
||
84 | "235" => ["Tokyo Standard Time", "(GMT+09:00) Osaka, Sapporo, Tokyo"], |
||
85 | "240" => ["Yakutsk Standard Time", "(GMT+09:00) Yakutsk"], |
||
86 | "245" => ["AUS Central Standard Time", "(GMT+09:30) Darwin"], |
||
87 | "250" => ["Cen Australia Standard Time", "(GMT+09:30) Adelaide"], |
||
88 | "255" => ["AUS Eastern Standard Time", "(GMT+10:00) Canberra, Melbourne, Sydney"], |
||
89 | "260" => ["E Australia Standard Time", "(GMT+10:00) Brisbane"], |
||
90 | "265" => ["Tasmania Standard Time", "(GMT+10:00) Hobart"], |
||
91 | "270" => ["Vladivostok Standard Time", "(GMT+10:00) Vladivostok"], |
||
92 | "275" => ["West Pacific Standard Time", "(GMT+10:00) Guam, Port Moresby"], |
||
93 | "280" => ["Central Pacific Standard Time", "(GMT+11:00) Magadan, Solomon Islands, New Caledonia"], |
||
94 | "285" => ["Fiji Islands Standard Time", "(GMT+12:00) Fiji Islands, Kamchatka, Marshall Islands"], |
||
95 | "290" => ["New Zealand Standard Time", "(GMT+12:00) Auckland, Wellington"], |
||
96 | "300" => ["Tonga Standard Time", "(GMT+13:00) Nuku'alofa"], |
||
97 | ]; |
||
98 | |||
99 | /** |
||
100 | * Python generated offset list |
||
101 | * dots in keys were removed. |
||
102 | * |
||
103 | * Array indices |
||
104 | * 0 = lBias |
||
105 | * 1 = lStandardBias |
||
106 | * 2 = lDSTBias |
||
107 | * 3 = wStartYear |
||
108 | * 4 = wStartMonth |
||
109 | * 5 = wStartDOW |
||
110 | * 6 = wStartDay |
||
111 | * 7 = wStartHour |
||
112 | * 8 = wStartMinute |
||
113 | * 9 = wStartSecond |
||
114 | * 10 = wStartMilliseconds |
||
115 | * 11 = wEndYear |
||
116 | * 12 = wEndMonth |
||
117 | * 13 = wEndDOW |
||
118 | * 14 = wEndDay |
||
119 | * 15 = wEndHour |
||
120 | * 16 = wEndMinute |
||
121 | * 17 = wEndSecond |
||
122 | * 18 = wEndMilloseconds |
||
123 | * |
||
124 | * As the $tzoneoffsets and the $mstzones need to be resolved in both directions, |
||
125 | * some offsets are commented as they are not available in the $mstzones. |
||
126 | * |
||
127 | * Created at: 01.06.2012 |
||
128 | */ |
||
129 | private static $tzonesoffsets = [ |
||
130 | "Transitional Islamic State of Afghanistan Standard Time" => [-270, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
131 | "Alaskan Standard Time" => [540, 0, -60, 0, 11, 0, 1, 2, 0, 0, 0, 0, 3, 0, 2, 2, 0, 0, 0], |
||
132 | "Arab Standard Time" => [-180, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
133 | "Arabian Standard Time" => [-240, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
134 | "Arabic Standard Time" => [-180, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
135 | // "Argentina Standard Time" => array(180, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), |
||
136 | "Atlantic Standard Time" => [240, 0, -60, 0, 11, 0, 1, 2, 0, 0, 0, 0, 3, 0, 2, 2, 0, 0, 0], |
||
137 | "AUS Central Standard Time" => [-570, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
138 | "AUS Eastern Standard Time" => [-600, 0, -60, 0, 4, 0, 1, 3, 0, 0, 0, 0, 10, 0, 1, 2, 0, 0, 0], |
||
139 | // "Azerbaijan Standard Time" => array(-240, 0, -60, 0, 10, 0, 5, 5, 0, 0, 0, 0, 3, 0, 5, 4, 0, 0, 0), |
||
140 | "Azores Standard Time" => [60, 0, -60, 0, 10, 0, 5, 3, 0, 0, 0, 0, 3, 0, 5, 2, 0, 0, 0], |
||
141 | // "Bangladesh Standard Time" => array(-360, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), |
||
142 | "Canada Central Standard Time" => [360, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
143 | "Cape Verde Standard Time" => [60, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
144 | "Caucasus Standard Time" => [-240, 0, -60, 0, 10, 0, 5, 3, 0, 0, 0, 0, 3, 0, 5, 2, 0, 0, 0], |
||
145 | "Cen Australia Standard Time" => [-570, 0, -60, 0, 4, 0, 1, 3, 0, 0, 0, 0, 10, 0, 1, 2, 0, 0, 0], |
||
146 | "Central America Standard Time" => [360, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
147 | "Central Asia Standard Time" => [-360, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
148 | // "Central Brazilian Standard Time" => array(240, 0, -60, 0, 2, 6, 4, 23, 59, 59, 999, 0, 10, 6, 3, 23, 59, 59, 999), |
||
149 | "Central Europe Standard Time" => [-60, 0, -60, 0, 10, 0, 5, 3, 0, 0, 0, 0, 3, 0, 5, 2, 0, 0, 0], |
||
150 | "Central European Standard Time" => [-60, 0, -60, 0, 10, 0, 5, 3, 0, 0, 0, 0, 3, 0, 5, 2, 0, 0, 0], |
||
151 | "Central Pacific Standard Time" => [-660, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
152 | "Central Standard Time" => [360, 0, -60, 0, 11, 0, 1, 2, 0, 0, 0, 0, 3, 0, 2, 2, 0, 0, 0], |
||
153 | "Mexico Standard Time" => [360, 0, -60, 0, 10, 0, 5, 2, 0, 0, 0, 0, 4, 0, 1, 2, 0, 0, 0], |
||
154 | "China Standard Time" => [-480, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
155 | "Dateline Standard Time" => [720, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
156 | "E Africa Standard Time" => [-180, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
157 | "E Australia Standard Time" => [-600, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
158 | "E Europe Standard Time" => [-120, 0, -60, 0, 10, 0, 5, 3, 0, 0, 0, 0, 3, 0, 5, 2, 0, 0, 0], |
||
159 | "E South America Standard Time" => [180, 0, -60, 0, 2, 6, 4, 23, 59, 59, 999, 0, 10, 6, 3, 23, 59, 59, 999], |
||
160 | "Eastern Standard Time" => [300, 0, -60, 0, 11, 0, 1, 2, 0, 0, 0, 0, 3, 0, 2, 2, 0, 0, 0], |
||
161 | "Egypt Standard Time" => [-120, 0, -60, 0, 9, 4, 5, 23, 59, 59, 999, 0, 4, 4, 5, 23, 59, 59, 999], |
||
162 | "Ekaterinburg Standard Time" => [-300, 0, -60, 0, 10, 0, 5, 3, 0, 0, 0, 0, 3, 0, 5, 2, 0, 0, 0], |
||
163 | "Fiji Islands Standard Time" => [-720, 0, -60, 0, 3, 0, 5, 3, 0, 0, 0, 0, 10, 0, 4, 2, 0, 0, 0], |
||
164 | "FLE Standard Time" => [-120, 0, -60, 0, 10, 0, 5, 4, 0, 0, 0, 0, 3, 0, 5, 3, 0, 0, 0], |
||
165 | // "Georgian Standard Time" => array(-240, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), |
||
166 | "GMT Standard Time" => [0, 0, -60, 0, 10, 0, 5, 2, 0, 0, 0, 0, 3, 0, 5, 1, 0, 0, 0], |
||
167 | "Greenland Standard Time" => [180, 0, -60, 0, 10, 6, 5, 23, 0, 0, 0, 0, 3, 6, 4, 22, 0, 0, 0], |
||
168 | "Greenwich Standard Time" => [0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
169 | "GTB Standard Time" => [-120, 0, -60, 0, 10, 0, 5, 4, 0, 0, 0, 0, 3, 0, 5, 3, 0, 0, 0], |
||
170 | "Hawaiian Standard Time" => [600, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
171 | "India Standard Time" => [-330, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
172 | "Iran Standard Time" => [-210, 0, -60, 0, 9, 1, 3, 23, 59, 59, 999, 0, 3, 6, 3, 23, 59, 59, 999], |
||
173 | "Israel Standard Time" => [-120, 0, -60, 0, 9, 0, 4, 2, 0, 0, 0, 0, 3, 5, 5, 2, 0, 0, 0], |
||
174 | // "Jordan Standard Time" => array(-120, 0, -60, 0, 10, 5, 5, 1, 0, 0, 0, 0, 3, 4, 5, 23, 59, 59, 999), |
||
175 | // "Kamchatka Standard Time" => array(-720, 0, -60, 0, 10, 0, 5, 3, 0, 0, 0, 0, 3, 0, 5, 2, 0, 0, 0), |
||
176 | "Korea Standard Time" => [-540, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
177 | // "Magadan Standard Time" => array(-660, 0, -60, 0, 10, 0, 5, 3, 0, 0, 0, 0, 3, 0, 5, 2, 0, 0, 0), |
||
178 | // "Mauritius Standard Time" => array(-240, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), |
||
179 | "Mid-Atlantic Standard Time" => [120, 0, -60, 0, 9, 0, 5, 2, 0, 0, 0, 0, 3, 0, 5, 2, 0, 0, 0], |
||
180 | // "Middle East Standard Time" => array(-120, 0, -60, 0, 10, 6, 5, 23, 59, 59, 999, 0, 3, 6, 4, 23, 59, 59, 999), |
||
181 | // "Montevideo Standard Time" => array(180, 0, -60, 0, 3, 0, 2, 2, 0, 0, 0, 0, 10, 0, 1, 2, 0, 0, 0), |
||
182 | // "Morocco Standard Time" => array(0, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), |
||
183 | "Mountain Standard Time" => [420, 0, -60, 0, 11, 0, 1, 2, 0, 0, 0, 0, 3, 0, 2, 2, 0, 0, 0], |
||
184 | "Mexico Standard Time 2" => [420, 0, -60, 0, 10, 0, 5, 2, 0, 0, 0, 0, 4, 0, 1, 2, 0, 0, 0], |
||
185 | "Myanmar Standard Time" => [-390, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
186 | "N Central Asia Standard Time" => [-360, 0, -60, 0, 10, 0, 5, 3, 0, 0, 0, 0, 3, 0, 5, 2, 0, 0, 0], |
||
187 | // "Namibia Standard Time" => array(-60, 0, -60, 0, 4, 0, 1, 2, 0, 0, 0, 0, 9, 0, 1, 2, 0, 0, 0), |
||
188 | "Nepal Standard Time" => [-345, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
189 | "New Zealand Standard Time" => [-720, 0, -60, 0, 4, 0, 1, 3, 0, 0, 0, 0, 9, 0, 5, 2, 0, 0, 0], |
||
190 | "Newfoundland and Labrador Standard Time" => [210, 0, -60, 0, 11, 0, 1, 0, 1, 0, 0, 0, 3, 0, 2, 0, 1, 0, 0], |
||
191 | "North Asia East Standard Time" => [-480, 0, -60, 0, 10, 0, 5, 3, 0, 0, 0, 0, 3, 0, 5, 2, 0, 0, 0], |
||
192 | "North Asia Standard Time" => [-420, 0, -60, 0, 10, 0, 5, 3, 0, 0, 0, 0, 3, 0, 5, 2, 0, 0, 0], |
||
193 | "Pacific SA Standard Time" => [240, 0, -60, 0, 3, 6, 2, 23, 59, 59, 999, 0, 10, 6, 2, 23, 59, 59, 999], |
||
194 | "Pacific Standard Time" => [480, 0, -60, 0, 11, 0, 1, 2, 0, 0, 0, 0, 3, 0, 2, 2, 0, 0, 0], |
||
195 | // "Pacific Standard Time (Mexico)" => array(480, 0, -60, 0, 10, 0, 5, 2, 0, 0, 0, 0, 4, 0, 1, 2, 0, 0, 0), |
||
196 | // "Pakistan Standard Time" => array(-300, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), |
||
197 | // "Paraguay Standard Time" => array(240, 0, -60, 0, 4, 6, 1, 23, 59, 59, 999, 0, 10, 6, 1, 23, 59, 59, 999), |
||
198 | "Romance Standard Time" => [-60, 0, -60, 0, 10, 0, 5, 3, 0, 0, 0, 0, 3, 0, 5, 2, 0, 0, 0], |
||
199 | "Russian Standard Time" => [-180, 0, -60, 0, 10, 0, 5, 3, 0, 0, 0, 0, 3, 0, 5, 2, 0, 0, 0], |
||
200 | "SA Eastern Standard Time" => [180, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
201 | "SA Pacific Standard Time" => [300, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
202 | "SA Western Standard Time" => [240, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
203 | "Samoa Standard Time" => [660, 0, -60, 0, 3, 6, 5, 23, 59, 59, 999, 0, 9, 6, 5, 23, 59, 59, 999], |
||
204 | "SE Asia Standard Time" => [-420, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
205 | "Singapore Standard Time" => [-480, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
206 | "South Africa Standard Time" => [-120, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
207 | "Sri Lanka Standard Time" => [-330, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
208 | // "Syria Standard Time" => array(-120, 0, -60, 0, 10, 4, 5, 23, 59, 59, 999, 0, 4, 4, 1, 23, 59, 59, 999), |
||
209 | "Taipei Standard Time" => [-480, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
210 | "Tasmania Standard Time" => [-600, 0, -60, 0, 4, 0, 1, 3, 0, 0, 0, 0, 10, 0, 1, 2, 0, 0, 0], |
||
211 | "Tokyo Standard Time" => [-540, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
212 | "Tonga Standard Time" => [-780, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
213 | // "Ulaanbaatar Standard Time" => array(-480, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), |
||
214 | "US Eastern Standard Time" => [300, 0, -60, 0, 11, 0, 1, 2, 0, 0, 0, 0, 3, 0, 2, 2, 0, 0, 0], |
||
215 | "US Mountain Standard Time" => [420, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
216 | // "UTC" => array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), |
||
217 | // "UTC+12" => array(-720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), |
||
218 | // "UTC-02" => array(120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), |
||
219 | // "UTC-11" => array(660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), |
||
220 | "Venezuela Standard Time" => [270, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
221 | "Vladivostok Standard Time" => [-600, 0, -60, 0, 10, 0, 5, 3, 0, 0, 0, 0, 3, 0, 5, 2, 0, 0, 0], |
||
222 | "W Australia Standard Time" => [-480, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
223 | "W Central Africa Standard Time" => [-60, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
224 | "W Europe Standard Time" => [-60, 0, -60, 0, 10, 0, 5, 3, 0, 0, 0, 0, 3, 0, 5, 2, 0, 0, 0], |
||
225 | "West Asia Standard Time" => [-300, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
226 | "West Pacific Standard Time" => [-600, 0, -60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
||
227 | "Yakutsk Standard Time" => [-540, 0, -60, 0, 10, 0, 5, 3, 0, 0, 0, 0, 3, 0, 5, 2, 0, 0, 0], |
||
228 | ]; |
||
229 | |||
230 | /** |
||
231 | * Generated list of PHP timezones in GMT timezones. |
||
232 | * |
||
233 | * Created at: 01.06.2012 |
||
234 | */ |
||
235 | private static $phptimezones = [ |
||
236 | // -720 min |
||
237 | "Dateline Standard Time" => [ |
||
238 | "Etc/GMT+12", |
||
239 | ], |
||
240 | |||
241 | // -660 min |
||
242 | "Samoa Standard Time" => [ |
||
243 | "Etc/GMT+11", |
||
244 | "Pacific/Midway", |
||
245 | "Pacific/Niue", |
||
246 | "Pacific/Pago_Pago", |
||
247 | "Pacific/Samoa", |
||
248 | "US/Samoa", |
||
249 | ], |
||
250 | |||
251 | // -600 min |
||
252 | "Hawaiian Standard Time" => [ |
||
253 | "America/Adak", |
||
254 | "America/Atka", |
||
255 | "Etc/GMT+10", |
||
256 | "HST", |
||
257 | "Pacific/Honolulu", |
||
258 | "Pacific/Johnston", |
||
259 | "Pacific/Rarotonga", |
||
260 | "Pacific/Tahiti", |
||
261 | "US/Aleutian", |
||
262 | "US/Hawaii", |
||
263 | ], |
||
264 | |||
265 | // -570 min |
||
266 | "-570" => [ |
||
267 | "Pacific/Marquesas", |
||
268 | ], |
||
269 | |||
270 | // -540 min |
||
271 | "Alaskan Standard Time" => [ |
||
272 | "America/Anchorage", |
||
273 | "America/Juneau", |
||
274 | "America/Nome", |
||
275 | "America/Sitka", |
||
276 | "America/Yakutat", |
||
277 | "Etc/GMT+9", |
||
278 | "Pacific/Gambier", |
||
279 | "US/Alaska", |
||
280 | ], |
||
281 | |||
282 | // -480 min |
||
283 | "Pacific Standard Time" => [ |
||
284 | "America/Dawson", |
||
285 | "America/Ensenada", |
||
286 | "America/Los_Angeles", |
||
287 | "America/Metlakatla", |
||
288 | "America/Santa_Isabel", |
||
289 | "America/Tijuana", |
||
290 | "America/Vancouver", |
||
291 | "America/Whitehorse", |
||
292 | "Canada/Pacific", |
||
293 | "Canada/Yukon", |
||
294 | "Etc/GMT+8", |
||
295 | "Mexico/BajaNorte", |
||
296 | "Pacific/Pitcairn", |
||
297 | "PST8PDT", |
||
298 | "US/Pacific", |
||
299 | "US/Pacific-New", |
||
300 | ], |
||
301 | |||
302 | // -420 min |
||
303 | "US Mountain Standard Time" => [ |
||
304 | "America/Boise", |
||
305 | "America/Cambridge_Bay", |
||
306 | "America/Chihuahua", |
||
307 | "America/Creston", |
||
308 | "America/Dawson_Creek", |
||
309 | "America/Denver", |
||
310 | "America/Edmonton", |
||
311 | "America/Hermosillo", |
||
312 | "America/Inuvik", |
||
313 | "America/Mazatlan", |
||
314 | "America/Ojinaga", |
||
315 | "America/Phoenix", |
||
316 | "America/Shiprock", |
||
317 | "America/Yellowknife", |
||
318 | "Canada/Mountain", |
||
319 | "Etc/GMT+7", |
||
320 | "Mexico/BajaSur", |
||
321 | "MST", |
||
322 | "MST7MDT", |
||
323 | "Navajo", |
||
324 | "US/Arizona", |
||
325 | "US/Mountain", |
||
326 | ], |
||
327 | |||
328 | // -360 min |
||
329 | "Central Standard Time" => [ |
||
330 | "America/Chicago", |
||
331 | "America/Indiana/Knox", |
||
332 | "America/Indiana/Tell_City", |
||
333 | "America/Knox_IN", |
||
334 | "America/North_Dakota/Beulah", |
||
335 | "America/North_Dakota/Center", |
||
336 | "America/North_Dakota/New_Salem", |
||
337 | "America/Rainy_River", |
||
338 | "America/Rankin_Inlet", |
||
339 | "America/Regina", |
||
340 | "America/Resolute", |
||
341 | "America/Swift_Current", |
||
342 | "America/Tegucigalpa", |
||
343 | "America/Winnipeg", |
||
344 | "US/Central", |
||
345 | "US/Indiana-Starke", |
||
346 | "CST6CDT", |
||
347 | "Etc/GMT+6", |
||
348 | ], |
||
349 | "Canada Central Standard Time" => [ |
||
350 | "Canada/Central", |
||
351 | "Canada/East-Saskatchewan", |
||
352 | "Canada/Saskatchewan", |
||
353 | ], |
||
354 | "Mexico Standard Time" => [ |
||
355 | "America/Mexico_City", |
||
356 | "America/Monterrey", |
||
357 | "Mexico/General", |
||
358 | ], |
||
359 | "Central America Standard Time" => [ |
||
360 | "America/Bahia_Banderas", |
||
361 | "America/Belize", |
||
362 | "America/Cancun", |
||
363 | "America/Costa_Rica", |
||
364 | "America/El_Salvador", |
||
365 | "America/Guatemala", |
||
366 | "America/Managua", |
||
367 | "America/Matamoros", |
||
368 | "America/Menominee", |
||
369 | "America/Merida", |
||
370 | "Chile/EasterIsland", |
||
371 | "Pacific/Easter", |
||
372 | "Pacific/Galapagos", |
||
373 | ], |
||
374 | |||
375 | // -300 min |
||
376 | "US Eastern Standard Time" => [ |
||
377 | "America/Detroit", |
||
378 | "America/Fort_Wayne", |
||
379 | "America/Grand_Turk", |
||
380 | "America/Indiana/Indianapolis", |
||
381 | "America/Indiana/Marengo", |
||
382 | "America/Indiana/Petersburg", |
||
383 | "America/Indiana/Vevay", |
||
384 | "America/Indiana/Vincennes", |
||
385 | "America/Indiana/Winamac", |
||
386 | "America/Indianapolis", |
||
387 | "America/Jamaica", |
||
388 | "America/Kentucky/Louisville", |
||
389 | "America/Kentucky/Monticello", |
||
390 | "America/Louisville", |
||
391 | "America/Montreal", |
||
392 | "America/New_York", |
||
393 | "America/Thunder_Bay", |
||
394 | "America/Toronto", |
||
395 | "Canada/Eastern", |
||
396 | "Cuba", |
||
397 | "EST", |
||
398 | "EST5EDT", |
||
399 | "Etc/GMT+5", |
||
400 | "Jamaica", |
||
401 | "US/East-Indiana", |
||
402 | "US/Eastern", |
||
403 | "US/Michigan", |
||
404 | ], |
||
405 | "SA Pacific Standard Time" => [ |
||
406 | "America/Atikokan", |
||
407 | "America/Bogota", |
||
408 | "America/Cayman", |
||
409 | "America/Coral_Harbour", |
||
410 | "America/Guayaquil", |
||
411 | "America/Havana", |
||
412 | "America/Iqaluit", |
||
413 | "America/Lima", |
||
414 | "America/Nassau", |
||
415 | "America/Nipigon", |
||
416 | "America/Panama", |
||
417 | "America/Pangnirtung", |
||
418 | "America/Port-au-Prince", |
||
419 | ], |
||
420 | |||
421 | // -270 min |
||
422 | "Venezuela Standard Time" => [ |
||
423 | "America/Caracas", |
||
424 | ], |
||
425 | // -240 min |
||
426 | "Atlantic Standard Time" => [ |
||
427 | "America/Barbados", |
||
428 | "America/Blanc-Sablon", |
||
429 | "America/Glace_Bay", |
||
430 | "America/Goose_Bay", |
||
431 | "America/Halifax", |
||
432 | "America/Lower_Princes", |
||
433 | "America/St_Barthelemy", |
||
434 | "America/St_Kitts", |
||
435 | "America/St_Lucia", |
||
436 | "America/St_Thomas", |
||
437 | "America/St_Vincent", |
||
438 | "America/Thule", |
||
439 | "America/Tortola", |
||
440 | "America/Virgin", |
||
441 | "Atlantic/Bermuda", |
||
442 | "Canada/Atlantic", |
||
443 | "Etc/GMT+4", |
||
444 | ], |
||
445 | "SA Western Standard Time" => [ |
||
446 | "America/Anguilla", |
||
447 | "America/Antigua", |
||
448 | "America/Aruba", |
||
449 | "America/Asuncion", |
||
450 | "America/Boa_Vista", |
||
451 | "America/Campo_Grande", |
||
452 | "America/Cuiaba", |
||
453 | "America/Curacao", |
||
454 | "America/Dominica", |
||
455 | "America/Eirunepe", |
||
456 | "America/Grenada", |
||
457 | "America/Guadeloupe", |
||
458 | "America/Guyana", |
||
459 | "America/Kralendijk", |
||
460 | "America/La_Paz", |
||
461 | "America/Manaus", |
||
462 | "America/Marigot", |
||
463 | "America/Martinique", |
||
464 | "America/Moncton", |
||
465 | "America/Montserrat", |
||
466 | "America/Port_of_Spain", |
||
467 | "America/Porto_Acre", |
||
468 | "America/Porto_Velho", |
||
469 | "America/Puerto_Rico", |
||
470 | "America/Rio_Branco", |
||
471 | "Brazil/Acre", |
||
472 | "Brazil/West", |
||
473 | ], |
||
474 | "Pacific SA Standard Time" => [ |
||
475 | "America/Santiago", |
||
476 | "America/Santo_Domingo", |
||
477 | "Antarctica/Palmer", |
||
478 | "Chile/Continental", |
||
479 | ], |
||
480 | |||
481 | // -210 min |
||
482 | "Newfoundland and Labrador Standard Time" => [ |
||
483 | "America/St_Johns", |
||
484 | "Canada/Newfoundland", |
||
485 | ], |
||
486 | |||
487 | // -180 min |
||
488 | "E South America Standard Time" => [ |
||
489 | "America/Araguaina", |
||
490 | "America/Bahia", |
||
491 | "America/Belem", |
||
492 | "America/Fortaleza", |
||
493 | "America/Maceio", |
||
494 | "America/Recife", |
||
495 | "America/Sao_Paulo", |
||
496 | "Brazil/East", |
||
497 | "Etc/GMT+3", |
||
498 | ], |
||
499 | "SA Eastern Standard Time" => [ |
||
500 | "America/Argentina/Buenos_Aires", |
||
501 | "America/Argentina/Catamarca", |
||
502 | "America/Argentina/ComodRivadavia", |
||
503 | "America/Argentina/Cordoba", |
||
504 | "America/Argentina/Jujuy", |
||
505 | "America/Argentina/La_Rioja", |
||
506 | "America/Argentina/Mendoza", |
||
507 | "America/Argentina/Rio_Gallegos", |
||
508 | "America/Argentina/Salta", |
||
509 | "America/Argentina/San_Juan", |
||
510 | "America/Argentina/San_Luis", |
||
511 | "America/Argentina/Tucuman", |
||
512 | "America/Argentina/Ushuaia", |
||
513 | "America/Buenos_Aires", |
||
514 | "America/Catamarca", |
||
515 | "America/Cayenne", |
||
516 | "America/Cordoba", |
||
517 | "America/Godthab", |
||
518 | "America/Jujuy", |
||
519 | "America/Mendoza", |
||
520 | "America/Miquelon", |
||
521 | "America/Montevideo", |
||
522 | "America/Paramaribo", |
||
523 | "America/Rosario", |
||
524 | "America/Santarem", |
||
525 | ], |
||
526 | "Greenland Standard Time" => [ |
||
527 | "Antarctica/Rothera", |
||
528 | "Atlantic/Stanley", |
||
529 | ], |
||
530 | |||
531 | // -120 min |
||
532 | "Mid-Atlantic Standard Time" => [ |
||
533 | "America/Noronha", |
||
534 | "Atlantic/South_Georgia", |
||
535 | "Brazil/DeNoronha", |
||
536 | "Etc/GMT+2", |
||
537 | ], |
||
538 | |||
539 | // -60 min |
||
540 | "Azores Standard Time" => [ |
||
541 | "Atlantic/Azores", |
||
542 | "Etc/GMT+1", |
||
543 | ], |
||
544 | "Cape Verde Standard Time" => [ |
||
545 | "America/Scoresbysund", |
||
546 | "Atlantic/Cape_Verde", |
||
547 | ], |
||
548 | |||
549 | // 0 min |
||
550 | "GMT Standard Time" => [ |
||
551 | "Eire", |
||
552 | "Etc/GMT", |
||
553 | "Etc/GMT+0", |
||
554 | "Etc/GMT-0", |
||
555 | "Etc/GMT0", |
||
556 | "Etc/Greenwich", |
||
557 | "Etc/UCT", |
||
558 | "Etc/Universal", |
||
559 | "Etc/UTC", |
||
560 | "Etc/Zulu", |
||
561 | "Europe/Belfast", |
||
562 | "Europe/Dublin", |
||
563 | "Europe/Guernsey", |
||
564 | "Europe/Isle_of_Man", |
||
565 | "Europe/Jersey", |
||
566 | "Europe/Lisbon", |
||
567 | "Europe/London", |
||
568 | "Factory", |
||
569 | "GB", |
||
570 | "GB-Eire", |
||
571 | "GMT", |
||
572 | "GMT+0", |
||
573 | "GMT-0", |
||
574 | "GMT0", |
||
575 | "Greenwich", |
||
576 | "Iceland", |
||
577 | "Portugal", |
||
578 | "UCT", |
||
579 | "Universal", |
||
580 | "UTC", |
||
581 | ], |
||
582 | "Greenwich Standard Time" => [ |
||
583 | "Africa/Abidjan", |
||
584 | "Africa/Accra", |
||
585 | "Africa/Bamako", |
||
586 | "Africa/Banjul", |
||
587 | "Africa/Bissau", |
||
588 | "Africa/Casablanca", |
||
589 | "Africa/Conakry", |
||
590 | "Africa/Dakar", |
||
591 | "Africa/El_Aaiun", |
||
592 | "Africa/Freetown", |
||
593 | "Africa/Lome", |
||
594 | "Africa/Monrovia", |
||
595 | "Africa/Nouakchott", |
||
596 | "Africa/Ouagadougou", |
||
597 | "Africa/Sao_Tome", |
||
598 | "Africa/Timbuktu", |
||
599 | "America/Danmarkshavn", |
||
600 | "Atlantic/Canary", |
||
601 | "Atlantic/Faeroe", |
||
602 | "Atlantic/Faroe", |
||
603 | "Atlantic/Madeira", |
||
604 | "Atlantic/Reykjavik", |
||
605 | "Atlantic/St_Helena", |
||
606 | "Zulu", |
||
607 | ], |
||
608 | |||
609 | // +60 min |
||
610 | "Central Europe Standard Time" => [ |
||
611 | "Europe/Belgrade", |
||
612 | "Europe/Bratislava", |
||
613 | "Europe/Budapest", |
||
614 | "Europe/Ljubljana", |
||
615 | "Europe/Prague", |
||
616 | "Europe/Vaduz", |
||
617 | ], |
||
618 | "Central European Standard Time" => [ |
||
619 | "Europe/Sarajevo", |
||
620 | "Europe/Skopje", |
||
621 | "Europe/Warsaw", |
||
622 | "Europe/Zagreb", |
||
623 | "MET", |
||
624 | "Poland", |
||
625 | ], |
||
626 | "Romance Standard Time" => [ |
||
627 | "Europe/Andorra", |
||
628 | "Europe/Brussels", |
||
629 | "Europe/Copenhagen", |
||
630 | "Europe/Gibraltar", |
||
631 | "Europe/Madrid", |
||
632 | "Europe/Malta", |
||
633 | "Europe/Monaco", |
||
634 | "Europe/Paris", |
||
635 | "Europe/Podgorica", |
||
636 | "Europe/San_Marino", |
||
637 | "Europe/Tirane", |
||
638 | ], |
||
639 | "W Europe Standard Time" => [ |
||
640 | "Europe/Amsterdam", |
||
641 | "Europe/Berlin", |
||
642 | "Europe/Luxembourg", |
||
643 | "Europe/Vatican", |
||
644 | "Europe/Rome", |
||
645 | "Europe/Stockholm", |
||
646 | "Arctic/Longyearbyen", |
||
647 | "Europe/Vienna", |
||
648 | "Europe/Zurich", |
||
649 | "Europe/Oslo", |
||
650 | "WET", |
||
651 | "CET", |
||
652 | "Etc/GMT-1", |
||
653 | ], |
||
654 | "W Central Africa Standard Time" => [ |
||
655 | "Africa/Algiers", |
||
656 | "Africa/Bangui", |
||
657 | "Africa/Brazzaville", |
||
658 | "Africa/Ceuta", |
||
659 | "Africa/Douala", |
||
660 | "Africa/Kinshasa", |
||
661 | "Africa/Lagos", |
||
662 | "Africa/Libreville", |
||
663 | "Africa/Luanda", |
||
664 | "Africa/Malabo", |
||
665 | "Africa/Ndjamena", |
||
666 | "Africa/Niamey", |
||
667 | "Africa/Porto-Novo", |
||
668 | "Africa/Tunis", |
||
669 | "Africa/Windhoek", |
||
670 | "Atlantic/Jan_Mayen", |
||
671 | ], |
||
672 | |||
673 | // +120 min |
||
674 | "E Europe Standard Time" => [ |
||
675 | "Europe/Bucharest", |
||
676 | "EET", |
||
677 | "Etc/GMT-2", |
||
678 | "Europe/Chisinau", |
||
679 | "Europe/Mariehamn", |
||
680 | "Europe/Nicosia", |
||
681 | "Europe/Simferopol", |
||
682 | "Europe/Tiraspol", |
||
683 | "Europe/Uzhgorod", |
||
684 | "Europe/Zaporozhye", |
||
685 | ], |
||
686 | "Egypt Standard Time" => [ |
||
687 | "Africa/Cairo", |
||
688 | "Africa/Tripoli", |
||
689 | "Egypt", |
||
690 | "Libya", |
||
691 | ], |
||
692 | "FLE Standard Time" => [ |
||
693 | "Europe/Helsinki", |
||
694 | "Europe/Kiev", |
||
695 | "Europe/Riga", |
||
696 | "Europe/Sofia", |
||
697 | "Europe/Tallinn", |
||
698 | "Europe/Vilnius", |
||
699 | ], |
||
700 | "GTB Standard Time" => [ |
||
701 | "Asia/Istanbul", |
||
702 | "Europe/Athens", |
||
703 | "Europe/Istanbul", |
||
704 | "Turkey", |
||
705 | ], |
||
706 | "Israel Standard Time" => [ |
||
707 | "Asia/Amman", |
||
708 | "Asia/Beirut", |
||
709 | "Asia/Damascus", |
||
710 | "Asia/Gaza", |
||
711 | "Asia/Hebron", |
||
712 | "Asia/Nicosia", |
||
713 | "Asia/Tel_Aviv", |
||
714 | "Asia/Jerusalem", |
||
715 | "Israel", |
||
716 | ], |
||
717 | "South Africa Standard Time" => [ |
||
718 | "Africa/Blantyre", |
||
719 | "Africa/Bujumbura", |
||
720 | "Africa/Gaborone", |
||
721 | "Africa/Harare", |
||
722 | "Africa/Johannesburg", |
||
723 | "Africa/Kigali", |
||
724 | "Africa/Lubumbashi", |
||
725 | "Africa/Lusaka", |
||
726 | "Africa/Maputo", |
||
727 | "Africa/Maseru", |
||
728 | "Africa/Mbabane", |
||
729 | ], |
||
730 | |||
731 | // +180 min |
||
732 | "Russian Standard Time" => [ |
||
733 | "Antarctica/Syowa", |
||
734 | "Europe/Kaliningrad", |
||
735 | "Europe/Minsk", |
||
736 | "Etc/GMT-3", |
||
737 | ], |
||
738 | "Arab Standard Time" => [ |
||
739 | "Asia/Qatar", |
||
740 | "Asia/Kuwait", |
||
741 | "Asia/Riyadh", |
||
742 | ], |
||
743 | "E Africa Standard Time" => [ |
||
744 | "Africa/Addis_Ababa", |
||
745 | "Africa/Asmara", |
||
746 | "Africa/Asmera", |
||
747 | "Africa/Dar_es_Salaam", |
||
748 | "Africa/Djibouti", |
||
749 | "Africa/Juba", |
||
750 | "Africa/Kampala", |
||
751 | "Africa/Khartoum", |
||
752 | "Africa/Mogadishu", |
||
753 | "Africa/Nairobi", |
||
754 | ], |
||
755 | "Arabic Standard Time" => [ |
||
756 | "Asia/Aden", |
||
757 | "Asia/Baghdad", |
||
758 | "Asia/Bahrain", |
||
759 | "Indian/Antananarivo", |
||
760 | "Indian/Comoro", |
||
761 | "Indian/Mayotte", |
||
762 | ], |
||
763 | |||
764 | // +210 min |
||
765 | "Iran Standard Time" => [ |
||
766 | "Asia/Tehran", |
||
767 | "Iran", |
||
768 | ], |
||
769 | |||
770 | // +240 min |
||
771 | "Arabian Standard Time" => [ |
||
772 | "Asia/Dubai", |
||
773 | "Asia/Muscat", |
||
774 | "Indian/Mahe", |
||
775 | "Indian/Mauritius", |
||
776 | "Indian/Reunion", |
||
777 | ], |
||
778 | "Caucasus Standard Time" => [ |
||
779 | "Asia/Baku", |
||
780 | "Asia/Tbilisi", |
||
781 | "Asia/Yerevan", |
||
782 | "Etc/GMT-4", |
||
783 | "Europe/Moscow", |
||
784 | "Europe/Samara", |
||
785 | "Europe/Volgograd", |
||
786 | "W-SU", |
||
787 | ], |
||
788 | |||
789 | // +270 min |
||
790 | "Transitional Islamic State of Afghanistan Standard Time" => [ |
||
791 | "Asia/Kabul", |
||
792 | ], |
||
793 | |||
794 | // +300 min |
||
795 | "Ekaterinburg Standard Time" => [ |
||
796 | "Antarctica/Mawson", |
||
797 | ], |
||
798 | "West Asia Standard Time" => [ |
||
799 | "Asia/Aqtau", |
||
800 | "Asia/Aqtobe", |
||
801 | "Asia/Ashgabat", |
||
802 | "Asia/Ashkhabad", |
||
803 | "Asia/Dushanbe", |
||
804 | "Asia/Karachi", |
||
805 | "Asia/Oral", |
||
806 | "Asia/Samarkand", |
||
807 | "Asia/Tashkent", |
||
808 | "Etc/GMT-5", |
||
809 | "Indian/Kerguelen", |
||
810 | "Indian/Maldives", |
||
811 | ], |
||
812 | |||
813 | // +330 min |
||
814 | "India Standard Time" => [ |
||
815 | "Asia/Calcutta", |
||
816 | "Asia/Colombo", |
||
817 | "Asia/Kolkata", |
||
818 | ], |
||
819 | |||
820 | // +345 min |
||
821 | "Nepal Standard Time" => [ |
||
822 | "Asia/Kathmandu", |
||
823 | "Asia/Katmandu", |
||
824 | ], |
||
825 | |||
826 | // +360 min |
||
827 | "Central Asia Standard Time" => [ |
||
828 | "Asia/Dacca", |
||
829 | "Asia/Dhaka", |
||
830 | ], |
||
831 | "Sri Lanka Standard Time" => [ |
||
832 | "Indian/Chagos", |
||
833 | ], |
||
834 | "N Central Asia Standard Time" => [ |
||
835 | "Antarctica/Vostok", |
||
836 | "Asia/Almaty", |
||
837 | "Asia/Bishkek", |
||
838 | "Asia/Qyzylorda", |
||
839 | "Asia/Thimbu", |
||
840 | "Asia/Thimphu", |
||
841 | "Asia/Yekaterinburg", |
||
842 | "Etc/GMT-6", |
||
843 | ], |
||
844 | |||
845 | // +390 min |
||
846 | "Myanmar Standard Time" => [ |
||
847 | "Asia/Rangoon", |
||
848 | "Indian/Cocos", |
||
849 | ], |
||
850 | |||
851 | // +420 min |
||
852 | "SE Asia Standard Time" => [ |
||
853 | "Asia/Bangkok", |
||
854 | "Asia/Ho_Chi_Minh", |
||
855 | "Asia/Hovd", |
||
856 | "Asia/Jakarta", |
||
857 | "Asia/Phnom_Penh", |
||
858 | "Asia/Saigon", |
||
859 | "Indian/Christmas", |
||
860 | ], |
||
861 | "North Asia Standard Time" => [ |
||
862 | "Antarctica/Davis", |
||
863 | "Asia/Novokuznetsk", |
||
864 | "Asia/Novosibirsk", |
||
865 | "Asia/Omsk", |
||
866 | "Asia/Pontianak", |
||
867 | "Asia/Vientiane", |
||
868 | "Etc/GMT-7", |
||
869 | ], |
||
870 | |||
871 | // +480 min |
||
872 | "China Standard Time" => [ |
||
873 | "Asia/Brunei", |
||
874 | "Asia/Choibalsan", |
||
875 | "Asia/Chongqing", |
||
876 | "Asia/Chungking", |
||
877 | "Asia/Harbin", |
||
878 | "Asia/Hong_Kong", |
||
879 | "Asia/Shanghai", |
||
880 | "Asia/Ujung_Pandang", |
||
881 | "Asia/Urumqi", |
||
882 | "Hongkong", |
||
883 | "PRC", |
||
884 | "ROC", |
||
885 | ], |
||
886 | "Singapore Standard Time" => [ |
||
887 | "Singapore", |
||
888 | "Asia/Singapore", |
||
889 | "Asia/Kuala_Lumpur", |
||
890 | ], |
||
891 | "Taipei Standard Time" => [ |
||
892 | "Asia/Taipei", |
||
893 | ], |
||
894 | "W Australia Standard Time" => [ |
||
895 | "Australia/Perth", |
||
896 | "Australia/West", |
||
897 | ], |
||
898 | "North Asia East Standard Time" => [ |
||
899 | "Antarctica/Casey", |
||
900 | "Asia/Kashgar", |
||
901 | "Asia/Krasnoyarsk", |
||
902 | "Asia/Kuching", |
||
903 | "Asia/Macao", |
||
904 | "Asia/Macau", |
||
905 | "Asia/Makassar", |
||
906 | "Asia/Manila", |
||
907 | "Etc/GMT-8", |
||
908 | "Asia/Ulaanbaatar", |
||
909 | "Asia/Ulan_Bator", |
||
910 | ], |
||
911 | |||
912 | // +525 min |
||
913 | "525" => [ |
||
914 | "Australia/Eucla", |
||
915 | ], |
||
916 | |||
917 | // +540 min |
||
918 | "Korea Standard Time" => [ |
||
919 | "Asia/Seoul", |
||
920 | "Asia/Pyongyang", |
||
921 | "ROK", |
||
922 | ], |
||
923 | "Tokyo Standard Time" => [ |
||
924 | "Asia/Tokyo", |
||
925 | "Japan", |
||
926 | "Etc/GMT-9", |
||
927 | ], |
||
928 | "Yakutsk Standard Time" => [ |
||
929 | "Asia/Dili", |
||
930 | "Asia/Irkutsk", |
||
931 | "Asia/Jayapura", |
||
932 | "Pacific/Palau", |
||
933 | ], |
||
934 | |||
935 | // +570 min |
||
936 | "AUS Central Standard Time" => [ |
||
937 | "Australia/Darwin", |
||
938 | "Australia/North", |
||
939 | ], |
||
940 | // DST |
||
941 | "Cen Australia Standard Time" => [ |
||
942 | "Australia/Adelaide", |
||
943 | "Australia/Broken_Hill", |
||
944 | "Australia/South", |
||
945 | "Australia/Yancowinna", |
||
946 | ], |
||
947 | |||
948 | // +600 min |
||
949 | "AUS Eastern Standard Time" => [ |
||
950 | "Australia/Canberra", |
||
951 | "Australia/Melbourne", |
||
952 | "Australia/Sydney", |
||
953 | "Australia/Currie", |
||
954 | "Australia/ACT", |
||
955 | "Australia/NSW", |
||
956 | "Australia/Victoria", |
||
957 | ], |
||
958 | "E Australia Standard Time" => [ |
||
959 | "Etc/GMT-10", |
||
960 | "Australia/Brisbane", |
||
961 | "Australia/Queensland", |
||
962 | "Australia/Lindeman", |
||
963 | ], |
||
964 | "Tasmania Standard Time" => [ |
||
965 | "Australia/Hobart", |
||
966 | "Australia/Tasmania", |
||
967 | ], |
||
968 | "Vladivostok Standard Time" => [ |
||
969 | "Antarctica/DumontDUrville", |
||
970 | ], |
||
971 | "West Pacific Standard Time" => [ |
||
972 | "Asia/Yakutsk", |
||
973 | "Pacific/Chuuk", |
||
974 | "Pacific/Guam", |
||
975 | "Pacific/Port_Moresby", |
||
976 | "Pacific/Saipan", |
||
977 | "Pacific/Truk", |
||
978 | "Pacific/Yap", |
||
979 | ], |
||
980 | |||
981 | // +630 min |
||
982 | "630" => [ |
||
983 | "Australia/LHI", |
||
984 | "Australia/Lord_Howe", |
||
985 | ], |
||
986 | |||
987 | // +660 min |
||
988 | "Central Pacific Standard Time" => [ |
||
989 | "Antarctica/Macquarie", |
||
990 | "Asia/Sakhalin", |
||
991 | "Asia/Vladivostok", |
||
992 | "Etc/GMT-11", |
||
993 | "Pacific/Efate", |
||
994 | "Pacific/Guadalcanal", |
||
995 | "Pacific/Kosrae", |
||
996 | "Pacific/Noumea", |
||
997 | "Pacific/Pohnpei", |
||
998 | "Pacific/Ponape", |
||
999 | ], |
||
1000 | |||
1001 | // 690 min |
||
1002 | "690" => [ |
||
1003 | "Pacific/Norfolk", |
||
1004 | ], |
||
1005 | |||
1006 | // +720 min |
||
1007 | "Fiji Islands Standard Time" => [ |
||
1008 | "Asia/Anadyr", |
||
1009 | "Asia/Kamchatka", |
||
1010 | "Asia/Magadan", |
||
1011 | "Kwajalein", |
||
1012 | ], |
||
1013 | "New Zealand Standard Time" => [ |
||
1014 | "Antarctica/McMurdo", |
||
1015 | "Antarctica/South_Pole", |
||
1016 | "Etc/GMT-12", |
||
1017 | "NZ", |
||
1018 | "Pacific/Auckland", |
||
1019 | "Pacific/Fiji", |
||
1020 | "Pacific/Funafuti", |
||
1021 | "Pacific/Kwajalein", |
||
1022 | "Pacific/Majuro", |
||
1023 | "Pacific/Nauru", |
||
1024 | "Pacific/Tarawa", |
||
1025 | "Pacific/Wake", |
||
1026 | "Pacific/Wallis", |
||
1027 | ], |
||
1028 | |||
1029 | // +765 min |
||
1030 | "765" => [ |
||
1031 | "NZ-CHAT", |
||
1032 | "Pacific/Chatham", |
||
1033 | ], |
||
1034 | |||
1035 | // +780 min |
||
1036 | "Tonga Standard Time" => [ |
||
1037 | "Etc/GMT-13", |
||
1038 | "Pacific/Apia", |
||
1039 | "Pacific/Enderbury", |
||
1040 | "Pacific/Tongatapu", |
||
1041 | ], |
||
1042 | |||
1043 | // +840 min |
||
1044 | "840" => [ |
||
1045 | "Etc/GMT-14", |
||
1046 | "Pacific/Fakaofo", |
||
1047 | "Pacific/Kiritimati", |
||
1048 | ], |
||
1049 | ]; |
||
1050 | |||
1051 | /** |
||
1052 | * Returns the binary timezone definition. |
||
1053 | * |
||
1054 | * @param string $phptimezone (opt) a php timezone string. |
||
1055 | * If omitted the env. default timezone is used. |
||
1056 | * |
||
1057 | * @return array|bool |
||
1058 | */ |
||
1059 | public static function GetBinaryTZ($phptimezone = false) { |
||
1060 | if ($phptimezone === false) { |
||
1061 | $phptimezone = date_default_timezone_get(); |
||
1062 | } |
||
1063 | SLog::Write(LOGLEVEL_DEBUG, sprintf("TimezoneUtil::GetBinaryTZ() for %s", $phptimezone)); |
||
1064 | |||
1065 | try { |
||
1066 | return mapi_ianatz_to_tzdef($phptimezone); |
||
|
|||
1067 | } |
||
1068 | catch (Exception $e) { |
||
1069 | SLog::Write(LOGLEVEL_WARN, sprintf("TimezoneUtil::GetBinaryTZ() mapi_ianatz_to_tzdef() for '%s' failed!", $phptimezone)); |
||
1070 | } |
||
1071 | |||
1072 | return false; |
||
1073 | } |
||
1074 | |||
1075 | /** |
||
1076 | * Returns a full timezone array. |
||
1077 | * |
||
1078 | * @param string $phptimezone (opt) a php timezone string. |
||
1079 | * If omitted the env. default timezone is used. |
||
1080 | * |
||
1081 | * @return array |
||
1082 | */ |
||
1083 | public static function GetFullTZ($phptimezone = false) { |
||
1084 | if ($phptimezone === false) { |
||
1085 | $phptimezone = date_default_timezone_get(); |
||
1086 | } |
||
1087 | |||
1088 | SLog::Write(LOGLEVEL_DEBUG, "TimezoneUtil::GetFullTZ() for " . $phptimezone); |
||
1089 | |||
1090 | $servertzname = self::guessTZNameFromPHPName($phptimezone); |
||
1091 | |||
1092 | return self::GetFullTZFromTZName($servertzname); |
||
1093 | } |
||
1094 | |||
1095 | /** |
||
1096 | * Returns a full timezone array. |
||
1097 | * |
||
1098 | * @param string $tzname a TZID value |
||
1099 | * |
||
1100 | * @return array |
||
1101 | */ |
||
1102 | public static function GetFullTZFromTZName($tzname) { |
||
1103 | if (!array_key_exists($tzname, self::$tzonesoffsets)) { |
||
1104 | SLog::Write(LOGLEVEL_DEBUG, sprintf("TimezoneUtil::GetFullTZFromTZName('%s'): Is a PHP TimeZone, converting", $tzname)); |
||
1105 | $tzname = self::guessTZNameFromPHPName($tzname); |
||
1106 | } |
||
1107 | |||
1108 | $offset = self::$tzonesoffsets[$tzname]; |
||
1109 | |||
1110 | return [ |
||
1111 | "bias" => $offset[0], |
||
1112 | "tzname" => self::encodeTZName(self::getMSTZnameFromTZName($tzname)), |
||
1113 | "dstendyear" => $offset[3], |
||
1114 | "dstendmonth" => $offset[4], |
||
1115 | "dstendday" => $offset[5], |
||
1116 | "dstendweek" => $offset[6], |
||
1117 | "dstendhour" => $offset[7], |
||
1118 | "dstendminute" => $offset[8], |
||
1119 | "dstendsecond" => $offset[9], |
||
1120 | "dstendmillis" => $offset[10], |
||
1121 | "stdbias" => $offset[1], |
||
1122 | "tznamedst" => self::encodeTZName(self::getMSTZnameFromTZName($tzname)), |
||
1123 | "dststartyear" => $offset[11], |
||
1124 | "dststartmonth" => $offset[12], |
||
1125 | "dststartday" => $offset[13], |
||
1126 | "dststartweek" => $offset[14], |
||
1127 | "dststarthour" => $offset[15], |
||
1128 | "dststartminute" => $offset[16], |
||
1129 | "dststartsecond" => $offset[17], |
||
1130 | "dststartmillis" => $offset[18], |
||
1131 | "dstbias" => $offset[2], |
||
1132 | ]; |
||
1133 | } |
||
1134 | |||
1135 | /** |
||
1136 | * Sets the timezone name by matching data from the offset (bias etc). |
||
1137 | * |
||
1138 | * @param mixed $tz |
||
1139 | * |
||
1140 | * @return array |
||
1141 | */ |
||
1142 | public static function FillTZNames($tz) { |
||
1143 | SLog::Write(LOGLEVEL_DEBUG, "TimezoneUtil::FillTZNames() filling up bias " . $tz["bias"]); |
||
1144 | if (!isset($tz["bias"])) { |
||
1145 | SLog::Write(LOGLEVEL_WARN, "TimezoneUtil::FillTZNames() submitted TZ array does not have a bias"); |
||
1146 | } |
||
1147 | else { |
||
1148 | $tzname = self::guessTZNameFromOffset($tz); |
||
1149 | $tz['tzname'] = $tz['tznamedst'] = self::encodeTZName(self::getMSTZnameFromTZName($tzname)); |
||
1150 | } |
||
1151 | |||
1152 | return $tz; |
||
1153 | } |
||
1154 | |||
1155 | /** |
||
1156 | * Tries to find a timezone using the Bias and other offset parameters. |
||
1157 | * |
||
1158 | * @param array $offset a grommunio-sync timezone array |
||
1159 | * |
||
1160 | * @return string |
||
1161 | */ |
||
1162 | private static function guessTZNameFromOffset($offset) { |
||
1163 | // try to find a quite exact match |
||
1164 | foreach (self::$tzonesoffsets as $tzname => $tzoffset) { |
||
1165 | if ($offset["bias"] == $tzoffset[0] && |
||
1166 | isset($offset["dstendmonth"]) && $offset["dstendmonth"] == $tzoffset[4] && |
||
1167 | isset($offset["dstendday"]) && $offset["dstendday"] == $tzoffset[6] && |
||
1168 | isset($offset["dststartmonth"]) && $offset["dststartmonth"] == $tzoffset[12] && |
||
1169 | isset($offset["dststartday"]) && $offset["dststartday"] == $tzoffset[14]) { |
||
1170 | return $tzname; |
||
1171 | } |
||
1172 | } |
||
1173 | |||
1174 | // try to find a bias match |
||
1175 | foreach (self::$tzonesoffsets as $tzname => $tzoffset) { |
||
1176 | if ($offset["bias"] == $tzoffset[0]) { |
||
1177 | return $tzname; |
||
1178 | } |
||
1179 | } |
||
1180 | |||
1181 | // nothing found? return gmt |
||
1182 | SLog::Write(LOGLEVEL_WARN, "TimezoneUtil::guessTZNameFromOffset() no timezone found for the data submitted. Returning 'GMT Standard Time'."); |
||
1183 | |||
1184 | return "GMT Standard Time"; |
||
1185 | } |
||
1186 | |||
1187 | /** |
||
1188 | * Tries to find a AS timezone for a php timezone. |
||
1189 | * |
||
1190 | * @param string $phpname a php timezone name |
||
1191 | * |
||
1192 | * @return string |
||
1193 | */ |
||
1194 | private static function guessTZNameFromPHPName($phpname) { |
||
1195 | foreach (self::$phptimezones as $tzn => $phptzs) { |
||
1196 | if (in_array($phpname, $phptzs)) { |
||
1197 | if (!is_int($tzn)) { |
||
1198 | return $tzn; |
||
1199 | } |
||
1200 | |||
1201 | break; |
||
1202 | } |
||
1203 | } |
||
1204 | SLog::Write(LOGLEVEL_ERROR, sprintf("TimezoneUtil::guessTZNameFromPHPName() no compatible timezone found for '%s'. Returning 'GMT Standard Time'. Please contact the grommunio dev team.", $phpname)); |
||
1205 | |||
1206 | return self::$mstzones["085"][0]; |
||
1207 | } |
||
1208 | |||
1209 | /** |
||
1210 | * Returns an AS compatible tz name. |
||
1211 | * |
||
1212 | * @param string $name internal timezone name |
||
1213 | * |
||
1214 | * @return string |
||
1215 | */ |
||
1216 | private static function getMSTZnameFromTZName($name) { |
||
1256 | } |
||
1257 | |||
1258 | /** |
||
1259 | * Encodes the tz name to UTF-16 compatible with a syncblob. |
||
1260 | * |
||
1261 | * @param string $name timezone name |
||
1262 | * |
||
1263 | * @return string |
||
1264 | */ |
||
1265 | private static function encodeTZName($name) { |
||
1266 | return substr(iconv('UTF-8', 'UTF-16', $name), 2, -1); |
||
1267 | } |
||
1268 | |||
1269 | /** |
||
1270 | * Pack timezone info for Sync. |
||
1271 | * |
||
1272 | * @param array $tz |
||
1273 | * |
||
1274 | * @return string |
||
1275 | */ |
||
1276 | public static function GetSyncBlobFromTZ($tz) { |
||
1277 | // set the correct TZ name (done using the Bias) |
||
1278 | if (!isset($tz["tzname"]) || !isset($tz["tznamedst"])) { |
||
1279 | $tz = TimezoneUtil::FillTZNames($tz); |
||
1280 | } |
||
1281 | |||
1282 | return pack( |
||
1283 | "la64vvvvvvvvla64vvvvvvvvl", |
||
1284 | $tz["bias"], |
||
1285 | $tz["tzname"], |
||
1286 | 0, |
||
1287 | $tz["dstendmonth"], |
||
1288 | $tz["dstendday"], |
||
1289 | $tz["dstendweek"], |
||
1290 | $tz["dstendhour"], |
||
1291 | $tz["dstendminute"], |
||
1292 | $tz["dstendsecond"], |
||
1293 | $tz["dstendmillis"], |
||
1294 | $tz["stdbias"], |
||
1295 | $tz["tznamedst"], |
||
1296 | 0, |
||
1297 | $tz["dststartmonth"], |
||
1298 | $tz["dststartday"], |
||
1299 | $tz["dststartweek"], |
||
1300 | $tz["dststarthour"], |
||
1301 | $tz["dststartminute"], |
||
1302 | $tz["dststartsecond"], |
||
1303 | $tz["dststartmillis"], |
||
1304 | $tz["dstbias"] |
||
1305 | ); |
||
1306 | } |
||
1307 | |||
1308 | /** |
||
1309 | * Returns official timezone name from windows timezone name. |
||
1310 | * E.g. "W Europe Standard Time" for "(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna". |
||
1311 | * |
||
1312 | * @param string $winTz Timezone name in windows |
||
1313 | * |
||
1314 | * @return string timezone name |
||
1315 | */ |
||
1316 | public static function GetTZNameFromWinTZ($winTz = false) { |
||
1329 | } |
||
1330 | |||
1331 | /** |
||
1332 | * Returns an GMT timezone array. |
||
1333 | * |
||
1334 | * @return array |
||
1335 | */ |
||
1336 | public static function GetGMTTz() { |
||
1359 | ]; |
||
1360 | } |
||
1361 | |||
1362 | /** |
||
1363 | * Creates an array that has split up all the components of a timezone |
||
1364 | * definition binary. |
||
1365 | * |
||
1366 | * Timezone definition structure: |
||
1367 | * |
||
1368 | * Major ver : UINT, 1 byte, 2 hex characters |
||
1369 | * Minor ver : UINT, 1 byte, 2 hex characters |
||
1370 | * cbHeader : UINT, 2 bytes, 4 hex characters |
||
1371 | * Reserved : UINT, 2 bytes, 4 hex characters |
||
1372 | * cchKeyName: UINT, 2 bytes, 4 hex characters |
||
1373 | * KeyName : CHAR, variable length (defined by cckeyname value) |
||
1374 | * cRules : UINT, 2 bytes, 4 hex characters |
||
1375 | * rules : STRUCT, variable length (defined by cRules value): |
||
1376 | * Major ver : UINT, 1 byte, 2 hex characters |
||
1377 | * Minor ver : UINT, 1 byte, 2 hex characters |
||
1378 | * Reserved : UINT, 2 bytes, 4 hex characters |
||
1379 | * TZRule flags : UINT, 2 bytes, 4 hex characters |
||
1380 | * wYear : UINT, 2 bytes, 4 hex characters |
||
1381 | * X : TCHAR[14] |
||
1382 | * lBias : LONG, 4 bytes, 8 hex characters |
||
1383 | * lStandardBias : LONG, 4 bytes, 8 hex characters |
||
1384 | * lDaylightBias : LONG, 4 bytes, 8 hex characters |
||
1385 | * stStandardDate: STRUCT |
||
1386 | * stDaylightDate: STRUCT |
||
1387 | * |
||
1388 | * stStandardDate/stDaylightDate: |
||
1389 | * wYear : UINT, 2 bytes, 4 hex characters |
||
1390 | * wMonth : UINT, 2 bytes, 4 hex characters |
||
1391 | * wDayOfWeek : UINT, 2 bytes, 4 hex characters |
||
1392 | * wDay : UINT, 2 bytes, 4 hex characters |
||
1393 | * wHour : UINT, 2 bytes, 4 hex characters |
||
1394 | * wMinute : UINT, 2 bytes, 4 hex characters |
||
1395 | * wSecond : UINT, 2 bytes, 4 hex characters |
||
1396 | * wMilliseconds: UINT, 2 bytes, 4 hex characters |
||
1397 | * |
||
1398 | * @param string $tzdef Timezone definition binary |
||
1399 | * |
||
1400 | * @return array timezone definition array |
||
1401 | */ |
||
1402 | public static function CreateTimezoneDefinitionObject($tzdef) { |
||
1442 | } |
||
1443 | |||
1444 | /** |
||
1445 | * Converts timezone definition to timezonetag prop |
||
1446 | * ("PT_BINARY:PSETID_Appointment:0x8233" aka |
||
1447 | * "PT_BINARY:PSETID_Appointment:" . PidLidTimeZoneStruct) |
||
1448 | * compatible structure. |
||
1449 | * |
||
1450 | * @param array $tzdef timezone definition array |
||
1451 | * |
||
1452 | * @return array |
||
1453 | */ |
||
1454 | public static function GetTzFromTimezoneDef($tzdef) { |
||
1494 | } |
||
1495 | } |
||
1496 |