[7589] | 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 | ?> |
---|