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